2

我收到此错误。

undefined method `email' for nil:NilClass

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

用户模型:

has_one :facility

用户设施:

belongs_to :user

设施控制器

@adminfacilities = Facility.all

索引.html.erb

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

我只是不明白我在这里做错了什么。为什么我无法访问此类信息?

非常感谢!

4

5 回答 5

2

正如 xdazz 所说,你facility.usernil.

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

validates_presence_of :user

以及对破坏的依赖

belongs_to :user, :dependent => :destroy
于 2013-04-17T09:28:48.730 回答
2

因为 some facility.useris nil,您可以使用:

@adminfacilities.each do |facility|
  facility.user.try(:email)
于 2013-04-17T09:24:37.193 回答
1

您可能有一个Facility没有在外键中分配给它的用户,当foreach循环到达该设施时,它发现没有分配用户,因此,它无法返回您正在寻找的用户属性,在这种情况下, email.

检查您的数据库Facility表,可能会有user_id一个nil.

于 2013-04-17T09:40:52.217 回答
0

代码本身看起来不错。

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

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

此外,强烈建议按照 ForgetTheNorm 所述添加验证。

于 2013-04-17T09:34:44.540 回答
0

一些相应的设施没有用户,所以它返回零。

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

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

设施.用户?facility.user.email : nil # 如果用户返回,它将为用户提供服务,否则它将给用户电子邮件,否则返回 nil

(或者)

设施.user.try(:email)

于 2013-04-17T12:03:45.390 回答