コントローラーアクションに渡したいradio_buttonがある編集フォームがあり、それを使用して計算を行います。私が持っているビューで:
<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 ステートメントで使用し、更新で加算または減算する必要があるかどうかを判断したいと考えています。ただし、必要に応じて、ポストに 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: 最後に、別のモデル評価を使用して関連付けを保存しました。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