尝试访问相关记录时的未定义方法

时间:2013-04-17 09:21:50

标签: ruby-on-rails activerecord

我收到此错误。

undefined method `email' for nil:NilClass

当我尝试访问我的相关模型记录时,如下所示:

用户模型:

has_one :facility

用户设施:

belongs_to :user

设施控制器

@adminfacilities = Facility.all

Index.html.erb

@adminfacilities.each do |facility|
  facility.user.email

我不知道我在这里做错了什么。 为什么我不能访问这些信息?

非常感谢!

5 个答案:

答案 0 :(得分:2)

由于某些facility.usernil,您可以使用:

@adminfacilities.each do |facility|
  facility.user.try(:email)

答案 1 :(得分:2)

正如xdazz所说,facility.usernil

也许您应该在Facility模型中添加验证

validates_presence_of :user

和销毁的依赖

belongs_to :user, :dependent => :destroy

答案 2 :(得分:1)

外键中可能有Facility 没有用户分配,当foreach循环到达该工具时,它发现有因此,没有用户分配,它无法返回您要查找的用户属性,在本例中为email

检查您的数据库设施表,user_id可能是nil

答案 3 :(得分:0)

代码本身看起来还不错。

我认为原因是您正在使用开发模式,并且没有创建正确的关联数据。

建议您再次检查数据以查看是否有任何设施记录没有user_id。

此外,强烈建议按照ForgetTheNorm的说法添加验证。

答案 4 :(得分:0)

某些相应的工厂没有用户,因此返回nil。

然后从用户表u或尝试访问电子邮件。所以它通过nil:NilClass(User nilclass)

的例外

我们可以写一些像这样的最佳理解代码

facility.user? facility.user.email:nil #如果用户返回,它将设施用户在那里它会给用户发送电子邮件,否则它返回nil

(或)

facility.user.try(:电子邮件)