关联帖子和用户

时间:2015-01-03 18:15:43

标签: ruby ruby-on-rails-4

以下是与原始问题相关的三个文件,我想...请原谅我的无知...... 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>

1 个答案:

答案 0 :(得分:0)

Ruby基本上告诉你,在第11行(<%= post.user.name %>),user对象的post关联是nil(即一个不存在的值,在Ruby是类NilClass)的单例实例。

因此,您尝试在#name上调用nil方法,显然没有这样的方法,因此NoMethodError

只需添加一项检查以确保用户在打印其名称<%= post.user.name unless post.user.nil? %>之前存在,或确保始终有用户与您的帖子相关联(例如通过validation),无论什么最适合你的情景。