我可能失去了一些東西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_id
和params[:vendor_id]
是)
任何幫助將不勝感激:)對不起,如果這是一個明顯的答案,我還是Rails的新手。
啊!我從來沒有使用'調試器'。多麼棒的工具!好吧,我想我已經縮小了我的問題 - 出於某種原因,好像我的'params [:vendor_id]'值不是整數?截圖 - > http://cl.ly/IwSb。如果它從URL中抽取這個值,它會如何認爲它不是一個整數? – briankulp
好吧,如果我將'.to_i'添加到'params [:vendor_id]',它現在可以正常工作了,但是URL:id不是一個整數真的很奇怪,不是嗎? – briankulp
參數始終是字符串。當直接作爲屬性傳遞給模型時,rails(可能是ActiveModel或ActiveRecord)根據你的模式代表你進行一些轉換(所以id在數據庫中是一個整數,所以它不會調用to_i等等)。由於您在此處使用原始參數,因此您需要進行轉換。在某些情況下,你不希望你的id是整數,就像使用FriendlyId或類似的東西時一樣。 –