nil:NilClass 的 属性 的 table 的未定义方法“名称”
Undefined method `name' for nil:NilClass for a property from a joined table
我有一个简短的问题。
我有 2 个表:Books 和 Readers。他们是这样加入的:
class Book < ActiveRecord::Base
belongs_to :reader
end
class Reader < ActiveRecord::Base
has_many :books
end
所以,在数据库中我有一本分配了 reader 的书,在视图中我在一个块中有这样一行:
<td><p><%= book.reader.name %></p></td>
但是它说有一个错误undefined method name for nil:NilClass
,虽然如果我把它改成
<td><p><%= book.reader %></p></td>
它显示了 object: Reader:0x007fa60ea72f40
的地址
你能告诉我这是怎么回事吗?正如我想的那样,它应该显示 Reader 的名字作为结果...
我的模型架构是:
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
结束
undefined method `name' for nil:NilClass
我认为您有一些书没有 reader 关联。因此,当您尝试访问 nil reader 的名称属性时,它会出现异常。
所以在 nil
调用时使用 #try
、try
returns nil
来拯救 nil
会很好:
<% @books.each do |book| %>
<%= book.reader.try(:name) %>
<% end %>
您可以使用 try
方法摆脱它。您可能有一些没有 作者 的书,这就是您调用 book.author
时得到 nil
的原因,而当您调用 [=14] 时=] 方法。这导致 NoMethodError
异常。尝试使用
来写
<%= book.author.try(:name) %>
我有一个简短的问题。 我有 2 个表:Books 和 Readers。他们是这样加入的:
class Book < ActiveRecord::Base
belongs_to :reader
end
class Reader < ActiveRecord::Base
has_many :books
end
所以,在数据库中我有一本分配了 reader 的书,在视图中我在一个块中有这样一行:
<td><p><%= book.reader.name %></p></td>
但是它说有一个错误undefined method name for nil:NilClass
,虽然如果我把它改成
<td><p><%= book.reader %></p></td>
它显示了 object: Reader:0x007fa60ea72f40
你能告诉我这是怎么回事吗?正如我想的那样,它应该显示 Reader 的名字作为结果...
我的模型架构是:
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
结束
undefined method `name' for nil:NilClass
我认为您有一些书没有 reader 关联。因此,当您尝试访问 nil reader 的名称属性时,它会出现异常。
所以在 nil
调用时使用 #try
、try
returns nil
来拯救 nil
会很好:
<% @books.each do |book| %>
<%= book.reader.try(:name) %>
<% end %>
您可以使用 try
方法摆脱它。您可能有一些没有 作者 的书,这就是您调用 book.author
时得到 nil
的原因,而当您调用 [=14] 时=] 方法。这导致 NoMethodError
异常。尝试使用
<%= book.author.try(:name) %>