ありがとうございます。私はレールを学んでおり、ウェブアプリケーションを構築しています。私は「安心して」、そのような言葉で考えようとしています。したがって、私は自分のデータをリソースとして見ています。私がマイクロポストと呼ばれるテーブルを持っていて、何人の人がアップ投票したのかダウン投票したのかを数える「投票」という列があるとします。ビューでこれはRailsアプリケーションの属性を更新するための「適切な」方法ですか?
:ユーザーがボタンをクリックすると、
<td>
<%= form_for feed_item do |f| %>
<div><%= hidden_field_tag 'todo', 'upvote' %></div>
<div class="action"><%= f.submit "Up" %></div>
<% end %>
</td>
<td>
<%= form_for feed_item do |f| %>
<div><%= hidden_field_tag 'todo', 'downvote' %></div>
<div class="action"><%= f.submit "Down" %></div>
<% end %>
<td>
は、それはコントローラの「更新」メソッドを呼び出して、私はそれがこのように取り組んでいます。そして、コントローラで、私はアップデートでこれを持っている:
def update
@todo = params[:todo]
if @todo == "upvote"
Micropost.find(params[:id]).increment!(:votes)
flash[:success] = "Increase micropost vote"
redirect_to root_path
elsif @todo == "downvote"
Micropost.find(params[:id]).decrement!(:votes)
flash[:success] = "Decrease micropost vote"
redirect_to root_path
else
redirect_to root_path
end
end
は私が押されたボタンが「upvote」または「downvote」であるかどうかを知るために隠しフィールドを渡します。したがって、他のマイクロポスト属性を変更したい場合は、より多くのif文が必要です。私はこの権利をしているとは思わない。 DBの属性またはレコードを更新するためのレールの方法は何ですか?
ありがとうございます!
'GET'と破壊的なアクション?それについて考えることさえしないでください! RESTは更新のために 'PUT'を予約します。この場合、' POST'よりもIMOが優れています。 –
'PUT'は更新用です、' POST'は一般的には新しいレコードを作成します。一般に投票は一度しか作成されず、調整されることはめったにないので、ここでは 'POST'が適切かもしれません。リンクプリローダーなどのために、「GET」が問題になっているのは間違いありません。そういうわけで、私はあなたが "必要なら"と言ったのです。 – tadman
ありがとう!私はRails 3を使用していますので、putとあなたのソリューションは動作します – okysabeni