新手问题 Rails 4 数据关联问题

suchiva · 2014年05月17日 · 最后由 billy 回复于 2014年05月18日 · 2200 次阅读

两个 model class Book < ActiveRecord::Base #book 字段分别是 id name author price user_id belongs_to :user end

class User < ActiveRecord::Base #book 字段分别是 id name has_one :book end

view: <%= user.book.name %>

提示错误:undefined method `name' for nil:NilClass 如果我输出为: <%= user.book %> 提示是正确的,不报错

之前 3 这样写是可以的,是不是 4 版本跟之前 3 版本有一些变动啊,还请指点,谢谢~

#1 楼 @messiahxu 没,我哪个是循环体内的, <% @users.each do |user| %> <%= user.book.name %> <% end %>

一般这个错误是因为漏了给某一个 user 创建一个 book.

4 楼 已删除

数据问题。没有与 userid 对应的 book 记录。检查一下数据

User.where.not id: Book.pluck(:user_id)

#3 楼 @billy 能详细点吗?

如果是 <%= user.book %>页面就显示 OK 的 #Book:0x007ffd01aba620

@suchiva 由于功能是逐渐增加的,在开发环境下可能会漏给一个记录创造对应的 association。users 在循环时某个 user 没有 book, 但你呼叫了 book.name, 就会报错。你可以看@saiga 的方法找到这个记录。

#8 楼 @billy #5 楼 @saiga 多谢谢二位,我重新建了哈数据库 migrate 了哈就可以了,可能就是”开发环境下可能会漏给一个记录创造对应的 association“这个原因,谢谢二位~

比较保险的做法 使用 user.book.try(:name)

@XiSi 我的意见是除非实在不得已不要使用 try。如果都需要这么写,一个正常的 Rails 程序会充满了 try, try this, try that, is there anything you are sure?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号