我试图将我的参数中的一个简单变量传递给一个类方法,但它似乎不起作用。这看起来很基本,但我还在学习。有人能解释为什么这不起作用并提供替代方案吗?我的代码如下。
控制器
@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手动替换它时,一切正常。
答案 0 :(得分:4)
params
是包含url参数的特殊rails哈希。因此,您的代码正在查找与包含用户配置文件的字符串版本的请求一起传递的url参数。这绝对不是你想要做的。
当您调用rails模型方法时,可以使用任何其他方法的参数调用它:Dog.by_profile(@profile)
你不希望params部分,或者你想要做一些应该重构的疯狂事情:)
答案 1 :(得分:0)
params
的键值应如params[:profile]
。
请尝试@dogs = Dog.by_profile(params[:profile])
。
答案 2 :(得分:0)
因为params是来自请求的哈希。你正在做的是尝试用一个错误的实例变量搜索哈希。
我认为你的意思是params[:profile]
或@profile