2011-03-15 5 views
0

나는 다음과 같은 링크가 있습니다레일 3 : 사용자가 URL을 입력하여 데이터베이스를 변경하지 못하게하는 방법은 무엇입니까?

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

Ajax 요청 사용하여 작업의 is_money_paid 필드 전환 :

http://localhost:3001/jobs/200/toggle_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" 

그러나 직접 사용자 유형의 경우 브라우저에서는 작업 # 200의 is_money_paid 필드를 토글합니다.

사용자가 링크를 눌러서 만 토글을 전환 할 수 있도록 어떻게 방지 할 수 있습니까?

답변

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) 
+1

무엇입니까? 이것은 해결책이 아닙니다. 그것이하는 유일한 일은 요청을하기가 더 어렵게 만드는 것이지만 여전히 가능합니다. – ryeguy

+0

@ryeguy CSRF를 방지하므로 사용자 만 필드를 전환 할 수 있습니다. – Samuel

+0

@ryeguy : 사람들은 주소 표시 줄에 URL을 입력하여 작동시킬 수 없습니다. 메소드는 PUT이어야하지만 URL은 GET입니다. –

관련 문제