Rails 3: Как запретить пользователям изменять базу данных, набирая URL? - PullRequest
0 голосов
/ 15 марта 2011

У меня есть следующая ссылка:

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

, которая переключает поле задания is_money_paid с помощью запроса Ajax:

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.

Как можно предотвратить это, чтобы пользователи могли переключать поле только нажатием на ссылку.

1 Ответ

2 голосов
/ 15 марта 2011

Вы можете предотвратить это, не определяя маршрут с помощью 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)
...