我有以下链接:
link_to("Toggle", "/jobs/#{job.id}/toggle_is_money_paid", :remote => true)
使用Ajax请求切换作业的is_money_paid
字段:
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
在浏览器中,它将切换作业#200的is_money_paid
字段。
我怎样才能阻止这种情况,这样用户只能通过按链接来切换字段。
答案 0 :(得分:2)
您可以通过不使用match
定义路由来阻止此操作,而是使用其中一个未获取的HTTP谓词来阻止此操作。更有可能的是,您需要使用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)