基本上我有一段代码片段存在于我的用户模型中:
def liked(bookmark)
likes.where(bookmark_id: bookmark.id).first
end
然而,当我运行服务器并点击主题以显示相关的书签时,我一直得到
undefined method `id' for nil:NilClass
我的问题是......首先出现了什么问题?其次,bookmark_id和bookmark.id之间的区别是什么?
我非常确定书签不存在ID ...如果不存在......我将如何添加它? 香港专业教育学院尝试通过迁移,不幸的是没有什么伟大的来自那个
答案 0 :(得分:1)
使用此代码:
def liked(bookmark)
likes.where(bookmark_id: bookmark.id).first if bookmark.present?
end
由于对象不存在,您收到id for nil:NilClass
错误。\ n bookmark
对象为零。
bookmark_id
是bookmark
类的字段名称。bookmark.id
仅在对象存在时才返回bookmark
对象的ID。< / p>
答案 1 :(得分:0)
bookmark.id
引发了异常。
确保将bookmark
实例传递给liked
方法,而不是nil
答案 2 :(得分:0)
您需要确保bookmark
参数不是零。
您可以尝试以下代码
def liked(bookmark)
likes.where(bookmark_id: bookmark.try(:id)).first
end
或更好的版本
def liked(bookmark)
likes.find_by(bookmark_id: bookmark.try(:id))
end
以上代码将返回nil
个对象或第一个like
要回答您的第二个问题,bookmark_id
是Like
模型的列名,而bookmark.id
是bookmark
对象的方法调用。
答案 3 :(得分:-1)
您可以尝试以下操作。
def liked(bookmark)
likes.where(bookmark_id: bookmark.id).try(:first) unless bookmark.blank?
end