Ruby on Rails 3 - 向注释模型添加了两个"belongs_to",但无法获取其中一个关联



我目前正在Rails上构建非常简单的注释系统。 主要模型是用户、相册帖子和评论。 用户可以发布专辑帖子。 对于每个专辑帖子,用户可以向专辑帖子添加评论。 因此,评论属于用户并属于相册帖子。

我遇到的问题是,即使我的模型中有适当的关联(见下文),我也无法得到

@comment.user.name

当我尝试在专辑帖子"显示"页面(/views/albumposts/show.html.erb)中呈现评论时。 当我转到该页面时,我无法获得@comment.user.name(不理解关联)并获得一个

"undefined method `name' for nil:NilClass"

奇怪的是我可以得到

@comment.albumpost.content

我已经仔细检查了我的模型,并向模型添加了正确的外键。 我在控制器中做错了什么吗?

这是我的模型:

class Comment < ActiveRecord::Base
  attr_accessible :body, :albumpost_id, :user_id
  belongs_to :albumpost
  belongs_to :user
end
class Albumpost < ActiveRecord::Base
  attr_accessible :content
  belongs_to :user
  has_many :comments, dependent: :destroy
end
class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation
  has_many :albumposts, dependent: :destroy
  has_many :comments, dependent: :destroy
end

以下是我的专辑帖子和评论控制器的相关部分:

class AlbumpostsController < ApplicationController
  def show
    @albumpost = Albumpost.find(params[:id])
    @comments = @albumpost.comments
    @comment = Comment.new
    @comment.albumpost_id = @albumpost.id
    @comment.user_id = current_user.id
  end
end
class CommentsController < ApplicationController
  def create
    albumpost_id = params[:comment].delete(:albumpost_id)
    @comment = Comment.new(params[:comment])
    @comment.albumpost_id = albumpost_id
    @comment.user_id = current_user.id
    @comment.save
    redirect_to albumpost_path(@comment.albumpost)
  end
end

我认为您应该更喜欢将对象设置为关系而不是设置它们的 id。例如,您应该这样做:

 @comment.user = current_user

而不是

 @comment.user_id = current_user.id

活动记录将负责设置相应的*_id字段。我不确定它如何处理相反的情况。(如果我理解正确,它应该会自动加载

相关内容

  • 没有找到相关文章