은 아마 extreamly 분명 뭔가가 있어요,하지만 난보고, 내 Orders_Controller
에 간단한 before_filter
검사를 미리 형성하기 위해 노력하고컨트롤러에서 'current_user'가 제대로 작동하지 않습니까?
나는 ... 우리 내 인생이 알 수없는 고안 current_user.vendor_id == params[:vendor_id]
경우. 나는 내 orders_controller
에서 설정 가지고 내가 사용자로 로그인하고,
http://localhost:3000/vendors/3/orders/
로 이동하면
before_filter :check_vendor
.
.
.
private
def check_vendor
unless current_user.vendor_id == params[:vendor_id]
redirect_to root_path, :flash => { error: "Sorry, but you don't have sufficient privlidges to view that page" }
end
end
이상한 일이 ...을 root_path
내 리디렉션, 거짓마다 반환
내 색인에이 코드가 있습니다
<%= current_user.vendor_id %> <%= params[:vendor_id] %>
그것은 orders#index
보기에 출력합니다 :
두 값이 '3'(또는 current_user.vendor_id
및 params[:vendor_id]
무엇이든) 것을의를 볼 수 있다는 것을 의미한다
3 3
:) 죄송합니다. 확실한 대답이라면 레일스에서 꽤 새로운 것입니다.
아! 전에'debugger '를 사용한 적이 없습니다. 이 얼마나 멋진 도구! 좋아, 내가 내 문제를 좁혀 생각 - 내'params [: vendor_id]'값이 정수가 아닌 것처럼 보이는 이유는 무엇입니까? 스크린 샷 -> http://cl.ly/IwSb. URL에서 해당 값을 가져 오는 경우 정수가 아니라고 어떻게 생각할 수 있습니까? – briankulp
'.to_i'를'params [: vendor_id]'에 추가하면 정상적으로 작동합니다.하지만 URL : id가 정수가 아닌 것은 정말 이상합니다. 그렇지 않습니까? – briankulp
매개 변수는 항상 문자열입니다. 레일즈 (아마도 ActiveModel 또는 ActiveRecord)는 스키마를 기반으로 사용자를 대신하여 (그래서 id는 db의 정수이므로 to_i를 호출 할 수 있도록) 변환을 수행합니다. 여기서 원시 매개 변수를 사용하므로 변환을 수행해야합니다. FriendlyId 또는 비슷한 것을 사용할 때처럼 정수가되는 것을 원하지 않는 경우가 있습니다. –