nil的未定义方法:NilClass但对象存在于控制台中

时间:2010-06-22 05:50:35

标签: ruby-on-rails

Showing app/views/posts/_post.html.erb where line #4 raised:

undefined method `name' for nil:NilClass

Extracted source (around line #4):

1: <p>
2:  <b>Post Content:</b>
3:  <%=h post.content %> by 
4:  <%=h post.author.name %>
5: </p>

这是我的帖子模型:

class Post < ActiveRecord::Base
  belongs_to :board
  belongs_to :author, :class_name => "User"
end

奇怪的是,如果我注释掉post.author.name,它就可以了。和.... 我在控制台中尝试过,它运行正常:

>> post
=> #<Post id: 1, content: "trying", user_id: 2, created_at: "2010-06-22 04:24:53", updated_at: "2010-06-22 04:24:53">
>> post.author
=> #<User id: 2, login: "test1@test.com", name: "test1",....
>> post.author.name
=> "test1"

事实上,如果我将post.author.name更改为post.user_id,它会显示正确的ID(即2)....

问题是什么?

非常感谢。

3 个答案:

答案 0 :(得分:1)

尝试指定值:foreign_key

答案 1 :(得分:0)

两件事:

  1. 您确定在控制台中检查的帖子与在视图中访问的帖子相同吗?也许你正在做post = Post.first这样的事情并且它不是正确的?
  2. 在提取的视图源中,您引用的是非实例变量。您是否在视图中的其他位置分配post(如循环)?如果没有,将其更改为@post可能会这样做。虽然这不太可能,但由于错误消息可能会有所不同。

答案 2 :(得分:0)

您还必须指定:foreign_key =&gt; “用户身份”。默认情况下,Rails将使用传递给belongs_to的符号来派生外键字段。在您的情况下,即使您指定了类名,它也会将author_id作为外键。 class_name选项告诉Rails期望什么类型的对象。