繁体   English   中英

Nil:NilClass 的 Rails 未定义方法“id”

[英]Rails-undefined method `id' for nil:NilClass

我收到错误 undefined method `id' for nil:NilClass。 我需要找到 oidValue 的 id。如果 oidValue 的 id 为 nil,我需要搜索 oid2 表以获取 oidValue。如何在此处检查 nil。下面的代码是我正在使用的。如果 oidId 为 nil,则不工作。

   oidId = Oid1.find_by(oid: oidvalue).id.to_s
    if oidId.nil?
      oidId = Oid2.find_by(oid: oidvalue).id.to_s
    end

使用安全导航运算符,如果属性不存在,它将返回 nil。

oidId = Oid1.find_by(oid: oidvalue)&.id

以下是如何操作的两个示例。

if Oid1.exists?(oid: oidValue)
  oidId = Oid1.find_by(oid: oidValue).id.to_s
else
  oidId = Oid2.find_by(oid: oidValue).id.to_s
end

或在一行中:

oidId = Oid1.exists?(oid: oidValue) ?
          Oid1.find_by(oid: oidValue).id.to_s : Oid2.find_by(oid: oidValue).id.to_s

这里重要的是保持上下文的可读性。

注意:您应该始终进行测试。

我希望这可以帮助你。

- - - - - - - - - - - - - - - - - - -

编辑:关于您的评论:

groupName = OidGroup.where("group_type is NULL AND group_type =(?) ", "Get").pluck(:groupname)

“我正在尝试这个,但得到的是空值。我想要 NULL 和 Get Values 组名”

注意:如果查询没有找到符合这些条件的记录,它将返回一个空数组。 结果: []

当您进行查询时: OidGroup.where("group_type is NULL AND group_type =(?) ","Get").pluck(:groupname)

你得到: SELECT "oid_groups"."groupname" FROM "oid_groups" WHERE (group_type = NULL and group_type = ('Get'))

我认为正确的方法是: OidGroup.where("group_type =? and group_type =?", nil, "Get").pluck(:groupname)

得到: SELECT "oid_groups"."groupname" FROM "oid_groups" WHERE (group_type = NULL and group_type = 'Get')

您可以在此处查看文档: Method Where

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM