关联 post 和用户
associating post and user
这是与原始问题相关的三个文件,我认为...请原谅我的无知...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
where the error is occuring:
<%= 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>
Ruby 基本上是在告诉您第 11 行 (<%= post.user.name %>
) 您的 post
对象的 user
关联是 nil
(即非-存在值,在 Ruby 中是 class NilClass
的单例实例)。
因此您试图在 nil
上调用 #name
方法,显然没有这样的方法,因此 NoMethodError
。
只需添加一个检查以确保用户在打印其名称之前存在 <%= post.user.name unless post.user.nil? %>
或确保始终有一个用户与您的帖子相关联(例如通过 validation),只要合适最适合您的情况。
这是与原始问题相关的三个文件,我认为...请原谅我的无知...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
where the error is occuring:
<%= 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>
Ruby 基本上是在告诉您第 11 行 (<%= post.user.name %>
) 您的 post
对象的 user
关联是 nil
(即非-存在值,在 Ruby 中是 class NilClass
的单例实例)。
因此您试图在 nil
上调用 #name
方法,显然没有这样的方法,因此 NoMethodError
。
只需添加一个检查以确保用户在打印其名称之前存在 <%= post.user.name unless post.user.nil? %>
或确保始终有一个用户与您的帖子相关联(例如通过 validation),只要合适最适合您的情况。