为什么这不适用于Acts_as_taggable_on

时间:2011-07-16 04:30:32

标签: ruby-on-rails filter tags acts-as-taggable-on

我的post.rb中有attr_accessor :politics, :tech, :entertainment, :sports, :science, :crime, :business, :social, :nature, :other(这些是标签),我希望它们是虚拟的。

然后在new.html.erb中我有

<%= f.check_box :politics %>
<%= f.label :politics %>

<%= f.check_box :tech %>
<%= f.label :tech, 'Technology' %>

<%= f.check_box :entertainment %>
<%= f.label :entertainment %>

<%= f.check_box :sports %>
<%= f.label :sports %>

<%= f.check_box :science %>
<%= f.label :science %>

<%= f.check_box :crime %>
<%= f.label :crime %>

<%= f.check_box :business %>
<%= f.label :business %>

<%= f.check_box :social %>
<%= f.label :social %>

<%= f.check_box :nature %>
<%= f.label :nature %>

<%= f.check_box :other %>
<%= f.label :other %>

因此,每个都被设置为true或false,最后,在def create下的post_controller.rb中我有

@post.tag_list << 'politics' if :politics
@post.tag_list << 'tech' if :tech
@post.tag_list << 'entertainment' if :entertainment
@post.tag_list << 'sports' if :sports
@post.tag_list << 'science' if :science
@post.tag_list << 'crime' if :crime
@post.tag_list << 'business' if :business
@post.tag_list << 'social' if :social
@post.tag_list << 'nature' if :nature
@post.tag_list << 'other' if :other

但是,当我在控制台中执行 post.tag_list 时,我会得到所有标签的响应#=&gt;'politics,tech,... nature,other'

为什么不是:如果我不检查,business = false?

1 个答案:

答案 0 :(得分:1)

您的控制器应如下所示。

@post.tag_list.clear
@post.tag_list << 'politics' if params[:post][:politics]
@post.tag_list << 'tech' if params[:post][:tech]
@post.tag_list << 'entertainment' if params[:post][:entertainment]
@post.tag_list << 'sports' if params[:post][:sports]
@post.tag_list << 'science' if params[:post][:science]
@post.tag_list << 'crime' if params[:post][:crime]
@post.tag_list << 'business' if params[:post][:business]
@post.tag_list << 'social' if params[:post][:social]
@post.tag_list << 'nature' if params[:post][:nature]
@post.tag_list << 'other' if params[:post][:other]

符号本身将始终评估为true。它更像是常数而不是变量。所以它永远不会赋值给它。