应该bookmark.id返回nil

时间:2016-03-14 07:34:02

标签: ruby-on-rails ruby ruby-on-rails-3 methods

嘿伙计们,所以我在向我的书页上添加喜欢/不喜欢功能时遇到了问题。

基本上我有一段代码片段存在于我的用户模型中:

   def liked(bookmark)
     likes.where(bookmark_id: bookmark.id).first
   end

然而,当我运行服务器并点击主题以显示相关的书签时,我一直得到

undefined method `id' for nil:NilClass

我的问题是......首先出现了什么问题?其次,bookmark_id和bookmark.id之间的区别是什么?

我非常确定书签不存在ID ...如果不存在......我将如何添加它? 香港专业教育学院尝试通过迁移,不幸的是没有什么伟大的来自那个

4 个答案:

答案 0 :(得分:1)

使用此代码:

 def liked(bookmark)
  likes.where(bookmark_id: bookmark.id).first if bookmark.present?
 end
  1. 由于对象不存在,您收到id for nil:NilClass错误。\ n bookmark对象为零。

  2. bookmark_idbookmark类的字段名称。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_idLike模型的列名,而bookmark.idbookmark对象的方法调用。

答案 3 :(得分:-1)

您可以尝试以下操作。

def liked(bookmark)
  likes.where(bookmark_id: bookmark.id).try(:first) unless bookmark.blank?
end