Rails 3:如何通过键入URL来阻止用户更改数据库?

时间:2011-03-15 02:01:02

标签: ruby-on-rails ajax ruby-on-rails-3 link-to-remote

我有以下链接:

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字段。

我怎样才能阻止这种情况,这样用户只能通过按链接来切换字段。

1 个答案:

答案 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)