以下是与原始问题相关的三个文件,我想...请原谅我的无知...... rails生成器为你做了很多工作,所以我还没有理解所有的连接。
class Post < ActiveRecord::Base
has_many :comments
belongs_to :user
default_scope { order('created_at DESC') }
end
class AddUserToPosts < ActiveRecord::Migration
def change
add_column :posts, :user_id, :integer, :name
add_index :posts, :user_id
end
end
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :title
t.text :body
t.text :name #added this
t.timestamps
end
end
end
发生错误的地方:
<%= link_to post.title, post %>
</h4>
<small>
>> submitted
<%= time_ago_in_words(post.created_at) %> ago by
<%= post.user.name %> <br/>
<!-- <%= post.comments.count %> Comments -->
</small>
答案 0 :(得分:0)
Ruby基本上告诉你,在第11行(<%= post.user.name %>
),user
对象的post
关联是nil
(即一个不存在的值,在Ruby是类NilClass
)的单例实例。
因此,您尝试在#name
上调用nil
方法,显然没有这样的方法,因此NoMethodError
。
只需添加一项检查以确保用户在打印其名称<%= post.user.name unless post.user.nil? %>
之前存在,或确保始终有用户与您的帖子相关联(例如通过validation),无论什么最适合你的情景。