Я бы предпочел создать атрибут для post.model для чтения в тегах. например,
приложение / модели / post.rb
def tag_list
self.tags.map { |t| t.name }.join(", ")
end
def tag_list=(new_value)
tag_names = new_value.split(/,\s+/)
self.tags = tag_names.map { |name| Tag.where('name = ?', name).first or Tag.create(:name => name) }
end
Тогда, по вашему мнению, вы можете сделать:
<%= f.text_field :tag_list %>
вместо: теги
Модель поста примет список тегов, разделится на имена тегов, найдет тег, если он существует, и создаст его, если он не существует. Логика контроллера не требуется.
РЕДАКТИРОВАТЬ Этот код, конечно, основан на том, что ваша модель тегов имеет атрибут с именем name (если не просто заменить какой-либо атрибут, в котором вы храните теги 'name'), и что он уникален в базе данных. (то есть вы используете что-то вроде validates_uniqueness_of :name
в вашей модели тегов)