У меня есть тег модель:
class Tag < ActiveRecord::Base
has_many :taggings, :dependent => :destroy
has_many :posts, :through => :taggings
has_many :subscriptions
has_many :subscribed_users, :source => :user, :through => :subscriptions
end
и Пост модель:
class Post < ActiveRecord::Base
attr_accessible :title, :content, :tag_names
belongs_to :user
has_many :taggings, :dependent => :destroy
has_many :tags, :through => :taggings
attr_writer :tag_names
after_save :assign_tags
def tag_names
@tag_names || tags.map(&:name).join(' ')
end
private
def assign_tags
return if @tag_names.blank?
@tag_names.split(" ").each do |name|
tag = Tag.find_or_create_by_name(name)
self.tags << tag unless tags.include?(tag)
end
end
end
Метод assign_tags
сохраняет сохраненные теги в :tag_names
и отображает их в поле ввода следующим образом: tag1 tag2 tag3
(значения разделены пробелами).
просмотры / сообщения / _form.html.erb:
<div class="field">
<%= f.label :tag_names %><br />
<%= f.autocomplete_field :tag_names, autocomplete_tag_name_posts_path, :"data-delimiter" => ' '%>
</div>
Как видите, assign_tags
, позволяет мне добавлять / выдвигать теги к tag_names
. Но если я удалю тег из поля ввода и сохраню. Тег все равно будет отображаться.
Любые предложения, чтобы помочь мне решить эту проблему?
(Может быть, tag_names
должен просто очистить себя, прежде чем теги будут введены. Но не знаю, как это кодировать).