Ruby on rails RubyonRails:充当gem上的标记,在模型中处理上下文
我想知道是否有人可以帮助我理解文档中的这一部分: 通过在模型中定义上下文,您可以同时使用多个新方法 Disposition可在上下文中管理和查看标记。例如,与 :skill context这些方法被添加到模型:skill_列表(和 技能列表。添加,技能列表。删除技能列表=),技能(复数), 技能很重要 我有这个: 型号: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
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