2011-06-20 5 views
5

データベースの中にたくさんのタグを作成しようとしていますが、誰も宝石でこれを行う方法を知っていますか?acts-as-taggable-onどのようにdb:タグ付け可能なタグとして私の行為をシード?

Productsテーブル:

create_table :products do |t| 
    t.string :name 
    t.date :date 
    t.decimal :price, :default => 0, :precision => 10, :scale => 2 
    t.integer :user_id 
end 

:tag_listフィールドは、ActsAsTaggableOnの移行によって作成された仮想列です:

class ActsAsTaggableOnMigration < ActiveRecord::Migration 
    def self.up 
    create_table :tags do |t| 
     t.string :name 
    end 

    create_table :taggings do |t| 
     t.references :tag 

     # You should make sure that the column created is 
     # long enough to store the required class names. 
     t.references :taggable, :polymorphic => true 
     t.references :tagger, :polymorphic => true 

     t.string :context 

     t.datetime :created_at 
    end 

    add_index :taggings, :tag_id 
    add_index :taggings, [:taggable_id, :taggable_type, :context] 
    end 

    def self.down 
    drop_table :taggings 
    drop_table :tags 
    end 
end 

これは私の製品/形で私の:tag_listフィールドです。 html.erb

<div class="field"> 
    <%= f.label :tag_list %>: 
    <%= f.text_field :tag_list %> 
</div> 

私は

Product.create([ 
    {:tag_list => 'Foods'}, 
    {:tag_list => 'Electronics'}, 
    {:tag_list => 'Pizza'}, 
    {:tag_list => 'Groceries'}, 
    {:tag_list => 'Walmart'}, 
    {:tag_list => 'Apples'}, 
    {:tag_list => 'Oranges'} ]) 

....このような何かをしようとしたが、RoRのスキルの私の欠如は、これは間違った方法であると私は、任意の提案を助けが必要と言われますか?

答えて

10

あなたのseeds.rbでこれを試すことができます。

list = ['tag 1', 'tag 2', ...] 

list.each do |tag| 
    ActsAsTaggableOn::Tag.new(:name => tag).save 
end 

はもちろん、ご希望のタグのリストの配列の値を代入。

注:これはタグテーブルに入力するだけです。私はそれがあなたが探していたものであることを願っています。

希望すると便利です。

+0

を行うことで、タグをシードできおかげで、感謝します! – LearningRoR

+0

それはあなたのために働いてうれしい。 – Brian

0

あなたはこのようなものを使用して、種子のファイルにいくつかのテスト製品を作成することがあります:

unless Rails.env.production? 
    1..20.times.each do |n| 
    Product.create(
     name: "Some product #{n}", 
     date: Date.today - n.days, 
     price: 1_000_000 + n, 
     user: User.first 
    ) 
    end 
end 

ですから、この

# ... 
    product = Product.create(
    # ... 
) 
    product.tag_list.add "tag1", "tag2" 
    product.save 
# ... 

それとも

# ... 
    Product.create(
    # ... 
).tap do |product| 
    product.tag_list.add "tag1", "tag2" 
    product.save 
    end 
# ... 
関連する問題