我有一个编辑表单,我有一个单选按钮,我想将它传递给控制器操作,然后用它来进行计算。在我看来:
<div class="field">
<%= radio_button_tag(:rating_select, "Up") %>
<%= label_tag(:rating_select, "Good.") %>
<%= radio_button_tag(:rating_select, "Down")%>
<%= label_tag(:rating_select, "Bad.")%>
</div>
在控制器中我有:
def rating
@post = Post.find(params[:id])
.....
end
def update
@post = Post.find(params[:id])
#@rating_select = params[:rating_select]
if @post.rating_select == "Up"
@post.score += 5
elsif @post.rating_select == "Down"
@post.score -= 5
end
......
end
目前它忽略了 if 语句,因此参数设置不正确。理想情况下,我只想使用视图中的临时变量在 if 语句中使用来决定是否需要在更新中添加或减去。但如果我也需要使用它,我也会在 post 中有一个 rating_select 字段。谢谢。
更新:谢谢。这是有道理的,我把它改成了下面,但它仍然没有根据单选框增加或减少分数。所以它似乎没有得到rating_select?:
def update
@post = Post.find(params[:id])
if params[:rating_select]=="Up"
@post.score += 5
elsif params[:rating_select]=="Down"
@post.score -= 5
end
respond_to do |format|
....
UPDATE2:终于想通了,使用另一个模型Ratings来存储关联。我在 Post 模型中使用了 before_save,它允许我进行计算和保存。多么令人头疼。
before_save :set_rating
def set_rating
if self.rating.rating_select=="Up"
rating.score += 5
elsif self.rating.rating_select=="Down"
rating.score -= 5
end
end