Rails. Почему для создания тегов acts_as_taggable не нужно находиться во вложенной форме?
Когда у меня есть отношения, такие как:
class Programmer < ActiveRecord::Base
has_many :projects
has_many :assignments, :through => :projects
acts_as_taggable
end
class Assignment < ActiveRecord::Base
has_many :projects
has_many :programmers, :through => :projects
end
Ввод данных как для программиста, так и для задания в одной форме требует от меня вложенной формы. Почему при наличии поля для тегов теги не обязательно должны быть во вложенной форме?
например, это не работает
<%= form_for(@programmer) do |p| %>
<%= p.label :name %><br />
<%= p.text_field :name %><br />
<%= p.label :assignments %><br />
<%= p.text_field :assignments %><br />
<%= p.submit %>
<% end %>
но почему это работает?
<%= form_for(@programmer) do |p| %>
<%= p.label :name %><br />
<%= p.text_field :name %><br />
<%= p.label :tag_list %><br />
<%= p.text_field :tag_list %><br />
<%= p.submit %>
<% end %>
1 ответ
Менее подробный ответ заключается в том, что acts_as_taggable_on обрабатывает создание тегов, когда вы используете tag_list=
,
Пример сеанса IRB:
$> photo = Photo.last
$> photo.tag_list # ['outer space', 'andromeda']
$> photo.tag_list = "outer space, andromeda, galaxy"
$> photo.tag_list # ['outer space', 'andromeda', 'galaxy']
$> photo.save
# checks the db for existing outer space, andromeda, and
# galaxy tags on the photo, creates any missing ones,
# deletes any ones it previously had but you didn't specify
acts_as_taggable_on может разумно реализовать это поведение в этом методе, поскольку библиотека может предположить, что вы хотите проверить наличие ошибок, и удалить все, что вы не предоставили. Делать это по умолчанию на любой родовой ассоциации было бы плохо:)