私は現在、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