1

私は現在、Rails上に非常に単純なコメントシステムを構築しています。主なモデルは、User、Albumpost、およびCommentです。ユーザーはアルバム投稿を投稿できます。アルバム投稿ごとに、ユーザーはアルバム投稿にコメントを追加できます。その結果、コメントはユーザーに属し、アルバム投稿に属します。

私が抱えている問題は、モデルに適切な関連付けがあっても(以下を参照)、取得できないことです。

@comment.user.name

albumpostの「show」ページ(/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

これが私のAlbumpostとCommentsコントローラーの関連部分です:

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
4

1 に答える 1

0

ID を設定するのではなく、オブジェクトをリレーションに設定することをお勧めします。たとえば、次のようにする必要があります。

 @comment.user = current_user

それ以外の

 @comment.user_id = current_user.id

ActiveRecord は、対応する*_idフィールドの設定を処理します。それが逆にどのように処理されるかはわかりません。(ただし、正しく理解していれば、自動ロードする必要があります

于 2013-01-31T05:52:26.477 に答える