Ruby on rails RubyonRails:充当gem上的标记,在模型中处理上下文

Ruby on rails RubyonRails:充当gem上的标记,在模型中处理上下文,ruby-on-rails,ruby,ruby-on-rails-4,acts-as-taggable-on,Ruby On Rails,Ruby,Ruby On Rails 4,Acts As Taggable On,我想知道是否有人可以帮助我理解文档中的这一部分: 通过在模型中定义上下文,您可以同时使用多个新方法 Disposition可在上下文中管理和查看标记。例如,与 :skill context这些方法被添加到模型:skill_列表(和 技能列表。添加,技能列表。删除技能列表=),技能(复数), 技能很重要 我有这个: 型号: class Project < ActiveRecord::Base acts_as_taggable # Alias for acts_as_taggable_on

我想知道是否有人可以帮助我理解文档中的这一部分:

通过在模型中定义上下文,您可以同时使用多个新方法 Disposition可在上下文中管理和查看标记。例如,与 :skill context这些方法被添加到模型:skill_列表(和 技能列表。添加,技能列表。删除技能列表=),技能(复数), 技能很重要

我有这个:

型号

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 -->
我可以把它放在我强壮的爱人身上

params.require(:project).permit(
    :user_id, :tag_list, :more_taggable_item_list)
然后我可以在我看来使用它:

<%= f.text_field :more_taggable_item_list %>

我想你必须使用复数形式,就像在文档中一样。所以
:items
而不是
:item
:more\u taggable\u items
而不是
:more\u taggable\u item
。Rails在创建正确的命名转换时为gems提供了很多功能,好的gems可以利用这些功能

# 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 %>
#模型
类项目
你是对的。如果在您的模型中使用默认的
acts\u as\u taggable
(或显式地
acts\u as\u taggable\u on:tags
),gem将动态定义以下方法:
tag\u list
tag\u list=
tags
tag\u counts

如果改为使用
作为标记:items
(注意复数,如@smallbutton.com所述),将动态定义以下方法:
item\u list
item\u list=
items
item\u counts

因此,在您的情况下,您不需要第一个
作为可标记的
。仅在以下项目上使用
作为标记,:更多标记项目
。然后,您可以在控制器和视图中使用
项目列表
更多标记项目列表
,而不是
标记列表


PS:参考请参见创业板中的操作:

# This is an alias for calling <tt>acts_as_taggable_on :tags</tt>.
def acts_as_taggable
  acts_as_taggable_on :tags
end
# This is an alias for calling <tt>acts_as_taggable_on :tags</tt>.
def acts_as_taggable
  acts_as_taggable_on :tags
end
# Loop over [:items, :more_taggable_items]
tag_types.map(&:to_s).each do |tags_type|
  tag_type = tags_type.to_s.singularize # 'item', 'more_taggable_item'
  # ...

  taggable_mixin.class_eval <<-RUBY, __FILE__, __LINE__ + 1
    # Define item_list, more_taggable_item_list
    def #{tag_type}_list
      tag_list_on('#{tags_type}')
    end

    # ...
  RUBY
end