2011-06-20 7 views
5

Estoy tratando de crear una gran cantidad de etiquetas dentro de mi base de datos, ¿alguien sabe cómo hacer esto con la gema acts-as-taggable-on?Cómo db: sembrar mis etiquetas act-as-taggable-on?

los productos tabla:

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 

y el campo :tag_list es una columna virtual creado por la migración de 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 

Ésta es mi campo :tag_list en mi productos/formulario. html.erb

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

Traté de hacer algo como esto ....

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

Pero mi falta de habilidad RoR me dice que este es el camino equivocado y que necesito ayuda, alguna sugerencia?

Respuesta

10

Usted puede intentar esto en su seeds.rb:

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

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

sustituto Obviamente los valores de la matriz lista de las etiquetas deseadas.

Nota: esto rellenará la tabla de etiquetas. Espero que sea eso lo que estabas buscando.

Espero que esto ayude!

+0

Gracias, ¡lo aprecio! – LearningRoR

+0

Me alegro de que funcionó para ti. – Brian

0

Es posible crear algunos productos de prueba en el archivo de semillas usando algo como esto:

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 

por lo que podría sembrar las etiquetas al hacer esto

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

O

# ... 
    Product.create(
    # ... 
).tap do |product| 
    product.tag_list.add "tag1", "tag2" 
    product.save 
    end 
# ... 
Cuestiones relacionadas