hel*_*llo 6 ruby ruby-on-rails acts-as-taggable-on ruby-on-rails-4
我想知道是否有人可以帮助我理解文档中的这一部分:
通过模型中定义的上下文,您可以使用多种新方法来管理和查看上下文中的标记.例如,使用:技能上下文将这些方法添加到模型中: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
Run Code Online (Sandbox Code Playgroud)
控制器:
def project_params
params.require(:project).permit(
:user_id, :tag_list)
end
Run Code Online (Sandbox Code Playgroud)
视图
<%= f.text_field :tag_list %> <!-- wrapped in a simple_form -->
Run Code Online (Sandbox Code Playgroud)
所以我的问题是......这是否意味着,如果我:items在我的模型中,我可以将所有内容替换:tag_list为:item_list?从现在开始只使用item_list?我尝试了这个,但它没有产生与我现在相同的结果......也许我搞砸了某个地方,但这"理论上"是否正确?
谢谢
奖金:
所以最终,如果我有多个我要标记的东西:
acts_as_taggable_on :item, :more_taggable_item
Run Code Online (Sandbox Code Playgroud)
我可以在我强大的参数中得到这个
params.require(:project).permit(
:user_id, :tag_list, :more_taggable_item_list)
Run Code Online (Sandbox Code Playgroud)
然后我可以在我看来使用它:
<%= f.text_field :more_taggable_item_list %>
Run Code Online (Sandbox Code Playgroud)
小智 1
你是对的。如果您在模型中使用默认acts_as_taggable(或显式acts_as_taggable_on :tags),则 gem 将动态定义以下方法:tag_list, tag_list=, tags, tag_counts。
如果您使用acts_as_taggable_on :items相反的方式(请注意复数,如 @smallbutton.com 所说),则将动态定义以下方法:item_list, item_list=, items, item_counts。
因此,就您而言,您不需要第一个acts_as_taggable. 仅使用acts_as_taggable_on :items, :more_taggable_items. 然后,您可以在控制器和视图中使用item_listand来代替。more_taggable_item_listtag_list
PS:供参考,看看gem中acts_as_taggable是如何定义的:
# This is an alias for calling <tt>acts_as_taggable_on :tags</tt>.
def acts_as_taggable
acts_as_taggable_on :tags
end
Run Code Online (Sandbox Code Playgroud)
方法生成有点复杂,但基本上它会循环acts_as_taggable_on参数,并用它们定义方法:
# 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
305 次 |
| 最近记录: |