2012-08-22 6 views
0

은 아마 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_idparams[:vendor_id] 무엇이든) 것을의를 볼 수 있다는 것을 의미한다

3 3 

:) 죄송합니다. 확실한 대답이라면 레일스에서 ​​꽤 새로운 것입니다.

답변

1

첫 번째 요청에서 컨트롤러에 [: vendor_id] 매개 변수를 보내시겠습니까?

내 gemfile에 gem 'debugger'을 추가하고 bundle install을 실행하고 을 before_filter의 comparisson 바로 위에 놓습니다.

그런 다음 매개 변수와 현재 사용자 값을 확인하십시오.

+0

아! 전에'debugger '를 사용한 적이 없습니다. 이 얼마나 멋진 도구! 좋아, 내가 내 문제를 좁혀 생각 - 내'params [: vendor_id]'값이 정수가 아닌 것처럼 보이는 이유는 무엇입니까? 스크린 샷 -> http://cl.ly/IwSb. URL에서 해당 값을 가져 오는 경우 정수가 아니라고 어떻게 생각할 수 있습니까? – briankulp

+0

'.to_i'를'params [: vendor_id]'에 추가하면 정상적으로 작동합니다.하지만 URL : id가 정수가 아닌 것은 정말 이상합니다. 그렇지 않습니까? – briankulp

+2

매개 변수는 항상 문자열입니다. 레일즈 (아마도 ActiveModel 또는 ActiveRecord)는 스키마를 기반으로 사용자를 대신하여 (그래서 id는 db의 정수이므로 to_i를 호출 할 수 있도록) 변환을 수행합니다. 여기서 원시 매개 변수를 사용하므로 변환을 수행해야합니다. FriendlyId 또는 비슷한 것을 사용할 때처럼 정수가되는 것을 원하지 않는 경우가 있습니다. –

관련 문제