2012-12-12 92 views
0

我想在我的params中傳遞一個簡單的變量到一個類方法,但它似乎沒有工作。這似乎很簡單,但我仍然在學習。有人可以解釋爲什麼這不起作用並提供替代方案嗎?我的代碼如下。爲什麼我的參數不會傳遞給我的模型?

控制器

@profile = current_user.profile 
@dogs = Dog.by_profile(params[@profile]) 

模型

def self.by_profile(profile) 
    Dog.where(kids_under_10: profile.kids_under_10) 
end 

*注:profile.kids_under_10是一個布爾值。當我手動將它替換爲true或false時,一切正常。

回答

4

params是一個特殊的軌道散列,其中包含url參數。因此,您的代碼正在查找與包含您的用戶配置文件的字符串版本的請求一起傳遞的url參數。這絕對不是你想要做的。

當你調用一個軌道模型的方法,用你喜歡的任何其他方法的參數調用它:Dog.by_profile(@profile)

你不想PARAMS一部分,或者你正在試圖做一些瘋狂的,應該是重構:)

+0

感謝這麼多的解釋和解決方案! –

0

您的關鍵值爲params應該看起來像params[:profile]

因此請嘗試@dogs = Dog.by_profile(params[:profile])

0

因爲params是來自請求的散列。你正在做的是試圖用一個實例變量來搜索哈希,這是錯誤的。

我想你的意思是做params[:profile]或只是@profile

相關問題