Ruby on rails Rails为什么创建标记时不需要将acts_as_标记为嵌套形式?

Ruby on rails Rails为什么创建标记时不需要将acts_as_标记为嵌套形式?,ruby-on-rails,forms,nested,acts-as-taggable,Ruby On Rails,Forms,Nested,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, :throu

当我有如下关系时:

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 %>

不太详细的答案是,当您使用tag_list=,actis_as_taggable_处理标记创建

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可以合理地在此方法中实现此行为,因为库可以假定您想要检查DUP,并删除您没有提供的任何内容。默认情况下,在任何泛型关联上执行此操作都是不好的: