我想知道是否有人可以帮助我理解文档中的这一部分:
使用模型中定义的上下文,您可以使用多个新方法 处理和查看上下文中的标记。例如,用 :技能上下文将这些方法添加到模型中:skill_list(和 skill_list.add,skill_list.remove skill_list =),技能(复数), skill_counts。
我有这个:
模型:
class Project < ActiveRecord::Base
acts_as_taggable # Alias for acts_as_taggable_on :tags
acts_as_taggable_on :item
end
控制器:
def project_params
params.require(:project).permit(
:user_id, :tag_list)
end
查看
<%= f.text_field :tag_list %> <!-- wrapped in a simple_form -->
所以我的问题是......这是否意味着,如果我的模型中有:items
,我可以将所有:tag_list
替换为:item_list
?从现在开始只使用item_list?我尝试了这个,但它没有产生与我现在相同的结果......也许我搞砸了某个地方,但这“理论上”是否正确?
由于
奖金:
所以最终,如果我想要标记不止一件事:
acts_as_taggable_on :item, :more_taggable_item
我可以在我强大的参数中找到这个
params.require(:project).permit(
:user_id, :tag_list, :more_taggable_item_list)
然后我可以在我看来使用它:
<%= f.text_field :more_taggable_item_list %>
答案 0 :(得分:3)
我想你必须使用复数形式,就像在文档中一样。所以:items
而不是:item
和:more_taggable_items
而不是:more_taggable_item
。在创建正确的命名对话时,Rails提供了许多用于宝石的功能,并且好的宝石可以利用它。
# model
class Project < ActiveRecord::Base
acts_as_taggable_on :items, :more_taggable_items
end
# params
def project_params
params.require(:project).permit(
:user_id, :item_list, :more_taggable_item_list)
end
# view
<%= f.text_field :item_list %>
<%= f.text_field :more_taggable_item_list %>
答案 1 :(得分:1)
你是对的。如果您在模型中使用默认的acts_as_taggable
(或显式acts_as_taggable_on :tags
),则gem将动态定义以下方法:tag_list
,tag_list=
,{{1} },tags
。
如果您改为使用tag_counts
(注意复数,如@ smallbutton.com所述),将动态定义以下方法:acts_as_taggable_on :items
,item_list
,item_list=
,items
。
因此,在您的情况下,您不需要第一个item_counts
。仅使用acts_as_taggable
。然后,您可以在控制器和视图中使用acts_as_taggable_on :items, :more_taggable_items
和item_list
,而不是more_taggable_item_list
。
PS:作为参考,请参阅gem中的acts_as_taggable
is defined:
tag_list
method generation有点复杂,但基本上它会遍历您的# This is an alias for calling <tt>acts_as_taggable_on :tags</tt>.
def acts_as_taggable
acts_as_taggable_on :tags
end
参数,并用它们定义方法:
acts_as_taggable_on