0

次のリンクがあります。

link_to("Toggle", "/jobs/#{job.id}/toggle_is_money_paid", :remote => true)

is_money_paidAjax リクエストを使用してジョブのフィールドを切り替えます。

def toggle_is_money_paid
  job = Job.find(params[:id])
  job.update_attributes(:is_money_paid => !job.is_money_paid)
  render :nothing => true
end

# config/routes.rb
match "/jobs/:id/toggle_is_money_paid" => "jobs#toggle_is_money_paid"

ただし、ユーザーが直接入力した場合:

http://localhost:3001/jobs/200/toggle_is_money_paid

is_money_paidブラウザで、ジョブ #200のフィールドを切り替えます。

ユーザーがリンクを押すことによってのみフィールドを切り替えることができるように、どうすればこれを防ぐことができますか?

4

1 に答える 1

2

を使用してルートを定義するのmatchではなく、get ではない HTTP 動詞の 1 つを使用することで、これを防ぐことができます。おそらく、次を使用したいと思うでしょうput

put "/jobs/:id/toggle_is_money_paid" => "jobs#toggle_is_money_paid"

次に、これを次のように変更しますlink_to

link_to("Toggle", "/jobs/#{job.id}/toggle_is_money_paid", :remote => true, :method => :put)
于 2011-03-15T02:11:15.767 に答える