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

suchiva · May 17, 2014 · Last by billy replied at May 18, 2014 · 2192 hits

两个 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 版本有一些变动啊,还请指点,谢谢~

应该是@user

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

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

4 Floor has deleted

数据问题。没有与 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)

#10 楼 @XiSi 谢谢指点!

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

You need to Sign in before reply, if you don't have an account, please Sign up first.