2011-03-11 53 views
0

当我有一个关系,如: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 %> 

回答

0

的不太详细的答案是当你使用tag_list=是acts_as_taggable_on处理标签的创建。

一个例子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,并删除任何你没有提供。默认情况下,在任何通用关联上执行此操作会很糟糕:)