2012-08-22 62 views
0

我可能失去了一些東西extreamly明顯,但我不知道這對於我們我的生活...Devise'current_user'在控制器中無法正常工作?

我想在我的Orders_Controller瓶坯簡單before_filter檢查,看是否制定current_user.vendor_id == params[:vendor_id]。它返回false每一次,我重定向到root_path,因爲我有它在我的orders_controller成立...

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 

最奇怪的是,當我與用戶登錄,並導航到

http://localhost:3000/vendors/3/orders/ 

,並在我的索引驗證碼:

<%= current_user.vendor_id %> <%= params[:vendor_id] %> 

它打印出來的orders#index觀點:

3 3 

這應該意味着,當我用同樣的邏輯控制器,它看到的,這兩個值是「3」(或任何current_user.vendor_idparams[:vendor_id]是)

任何幫助將不勝感激:)對不起,如果這是一個明顯的答案,我還是Rails的新手。

回答

1

您確定要向控制器發送第一個請求中的de param [:vendor_id]嗎?

我會將gem 'debugger'添加到我的gem文件中,運行bundle install,並將debugger放在before_filter的comparisson之上。

然後檢查參數和當前用戶值。

+0

啊!我從來沒有使用'調試器'。多麼棒的工具!好吧,我想我已經縮小了我的問題 - 出於某種原因,好像我的'params [:vendor_id]'值不是整數?截圖 - > http://cl.ly/IwSb。如果它從URL中抽取這個值,它會如何認爲它不是一個整數? – briankulp

+0

好吧,如果我將'.to_i'添加到'params [:vendor_id]',它現在可以正常工作了,但是URL:id不是一個整數真的很奇怪,不是嗎? – briankulp

+2

參數始終是字符串。當直接作爲屬性傳遞給模型時,rails(可能是ActiveModel或ActiveRecord)根據你的模式代表你進行一些轉換(所以id在數據庫中是一個整數,所以它不會調用to_i等等)。由於您在此處使用原始參數,因此您需要進行轉換。在某些情況下,你不希望你的id是整數,就像使用FriendlyId或類似的東西時一樣。 –

相關問題