Как сделать пользовательские actions_as_taggable_on? - PullRequest
0 голосов
/ 21 марта 2012

как сделать с помощью act_as_taggable_on?

В моей базе данных есть теги, post_tags, posts (модель: Tag, PostTag, Post).-on ',' ~> 2.2.2 'в Gemfile.

при генерации миграции, я обнаружил, что он генерирует таблицы по умолчанию (теги, tagger, тегирование).опция по умолчанию для адаптации моей модели?

1 Ответ

2 голосов
/ 21 марта 2012

Все теги хранятся в ActsAsTaggableOn :: Tag (: id,: name) модели и доступны через ActsAsTaggableOn :: Taggable (: id,: tag_id,: taggable_type,: taggable_id, : контекст и т. д.) модель.

Если вы хотите переключиться на акты как теги и не потерять ранее добавленные теги, вы должны создать задачу переноса или создания граблей после создания таблиц актов по умолчанию как актов.

Как это:

# In your model
acts_as_taggable_on :post_tags

# Rake task
require 'acts-as-taggable-on'

task :move_tags => [:environment] do
  @posts = Post.all
  Post.transaction do
    Tag.transaction do
      @posts.each do |p|
        if p.tags.any?
          p.update_attributes post_tag_list: p.tags.map(&:name)
          p.tags.map(&:destroy)
        end
      end
    end
  end
end

# Now, if all is ok, you can drop both old tags and join table and remove associasions from your Post model.

Я не тестировал этот фрагмент, но я успешно делал подобное раньше.

...