1

我有以下序列化程序

在我的图像表中,我有 id - 1,2,3,4 的数据

如果我在序列化程序中将 id 传递为 5 而不是抛出空结果,则会抛出异常

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

为什么会发生这种情况,我该如何解决。

def image_ids
  image_id = Images.where(post_id: id).first
  unless image_id.nil?
    image_id = image_id.id
    [image_id]
  end
end
4

3 回答 3

0

您收到错误Called id for nil, which would mistakenly be 4 --是因为

Images.where(post_id: id)return []for id = 5,如果你这样做了,[].first那么输出将是nil

所以,到目前为止,你image_idnil

现在,当您执行nil.id 时,它会引发异常,并且因为nil.object_id happens to be 4,它会按说明发出警告。

有关此异常的更多信息,您可以参考此博客:http ://blog.bigbinary.com/2008/06/23/why-the-id-of-nil-is-4-in-ruby.html

你的方法应该是:

def image_ids
  image_object = Images.where(post_id: id).first
  unless image_object.blank?
    image_id = image_object.id
    [image_id]
  end
end
于 2013-10-17T15:37:29.723 回答
0

代替

image_id.nil?

image_id.present? (As always to check object)
于 2016-07-27T13:55:57.590 回答
0

试试这个image_id = Images.where(post_id: id).first

image_id = Image.where(post_id: id).first

你写错了型号名称Images

它是复数

而导轨使用

单数形式

型号名称Image

注意:您必须id在此行之前设置值

于 2016-07-27T13:46:23.483 回答