我有一个简单的问题。 我有2个表:书籍和读者。他们是这样加入的:
class Book < ActiveRecord::Base
belongs_to :reader
end
class Reader < ActiveRecord::Base
has_many :books
end
所以,在数据库中,我有一本书有一个指定的读者,在视图中我在一个块中有这样的一行:
<td><p><%= book.reader.name %></p></td>
但它表示存在错误undefined method name for nil:NilClass
,但如果我用
<td><p><%= book.reader %></p></td>
它显示了object: Reader:0x007fa60ea72f40
请你告诉我这里发生了什么事?我想它应该显示一个读者的名字......
我模型的架构是:
ActiveRecord::Schema.define(version: 20150320182921) do
create_table "books", force: :cascade do |t|
t.string "name"
t.string "author"
t.integer "pages"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "reader_id"
end
create_table "readers", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
端
答案 0 :(得分:2)
您可以使用try
方法解决此问题。你可能有一些没有作者的书籍,这就是你打电话book.author
的原因,你得到nil
,当你打电话给name
方法时。这导致了NoMethodError
异常。尝试使用
<%= book.author.try(:name) %>
答案 1 :(得分:1)
nil的未定义方法`name':NilClass
我认为你有一些没有读者关联的书。因此,当您尝试访问nil阅读器的name属性时,它会变得异常。
因此,nil
使用try
nil
,nil
时,<% @books.each do |book| %>
<%= book.reader.try(:name) %>
<% end %>
调用{{1}},这将是很好的。
{{1}}