Как сделать db: заполнить мои теги актов-как-taggable-на? - PullRequest
6 голосов
/ 20 июня 2011

Я пытаюсь создать большое количество тегов внутри моей базы данных, кто-нибудь знает, как это сделать с помощью гема acts-as-taggable-on ?

Таблица продуктов:

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 в моих products / form.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 говорит мне, что это неправильный путь, и что мне нужна помощь, есть предложения?

Ответы [ 2 ]

12 голосов
/ 20 июня 2011

Вы можете попробовать это в вашем seed.rb:

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

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

Очевидно, подставьте значения массива списка для желаемых тегов.

Примечание: это просто заполнит таблицу тегов,Я надеюсь, что это то, что вы искали.

Надеюсь, это поможет!

0 голосов
/ 28 августа 2014

Вы можете создать некоторые тестовые продукты в вашем файле seed, используя что-то вроде этого:

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
# ...
...