Ruby on rails 未定义的方法'first';对于nil:nil类Ruby
我对这个错误感到困惑。我在没有任何“第一”的情况下得到了它 调用错误的行如下所示:Ruby on rails 未定义的方法'first';对于nil:nil类Ruby,ruby-on-rails,has-many-through,Ruby On Rails,Has Many Through,我对这个错误感到困惑。我在没有任何“第一”的情况下得到了它 调用错误的行如下所示: = @wiki.creator.name 我的wiki有很多用户,我的用户也有很多wiki,通过一个名为Relationships的表(带有属性:wiki\u id、:user\u id、:creator\u created)。Creator是我在wiki模型中定义的方法: has_many :relationships has_many :users, through: :relationships def
= @wiki.creator.name
我的wiki有很多用户,我的用户也有很多wiki,通过一个名为Relationships的表(带有属性:wiki\u id、:user\u id、:creator\u created)。Creator是我在wiki模型中定义的方法:
has_many :relationships
has_many :users, through: :relationships
def creator
self.relationships.find_by(:creator_created == true).user
end
这条线昨天还在工作,我没有做任何应该改变它的事情。但现在我得到了“nil的未定义方法‘first’:Nilclass。”
我已经检查过了,@wiki及其相关关系不是零,所以我不知道什么是
有什么想法吗?基本上find_by()
首先在内部调用,,这可能是错误的根源
不确定您为什么会得到nil
,因为您的find\u by
应该解析为where(false)
,这应该仍然是一个有效的对象,但请尝试按照评论者的建议修复它。Stacktrace请!顺便说一句:find\u by(:creator\u created==true)
无效。应该是find\u by(creator\u created:true)
发生这种情况是因为self.relationships.find\u by(:creator\u created==true)
找不到任何与具有指定条件的对象相关的关系对象。它确实返回nil,然后您尝试在nil对象上调用一个方法(.user
,在您的情况下),谢谢BroiSatse!出于某种原因,这段代码已经在其他页面上运行了好几个星期,但修改它似乎解决了我的问题。Yoshiji先生,我很感谢你的解释,但问题是用户不是零,我无论如何都会遇到这个错误@EllenW-这并不是说它对你的问题有任何影响,只是为了你的总体理解-你稍微误解了@MrYoshiji的评论。他说你的find_by()
返回了nil
,然后你试图在nil
上调用user
方法,也就是说,你实际上是在调用nil.user