わかりました、まだ私の道を学ぼうとしているレール上のルビーの初心者です。2つのモデル(ユーザーモデルとコメントモデル)があります。基本的に、ユーザーは同じページに「自己紹介」セクションと写真のセクションがある単純なプロファイルを持っています。他のユーザープロファイルにコメントするには、ユーザーはサインインする必要があります。
私のユーザーモデル
class User < ActiveRecord::Base
attr_accessible :email, :name, :username, :gender, :password, :password_confirmation
has_secure_password
has_many :comments
.
.
end
私のコメントモデル
class Comment < ActiveRecord::Base
belongs_to :user
attr_accessible :content
.
.
end
コメントテーブルには、user_id
プロファイルにコメントが付けられたユーザーのIDを格納するcommenter_id
列と、プロファイルにコメントするユーザーのIDを格納する列があります。
コメントフォーム
<%= form_for([@user, @user.comments.build]) do |f| %>
<%= f.text_area :content, cols: "45", rows: "3", class: "btn-block comment-box" %>
<%= f.submit "Comment", class: "btn" %>
<% end %>
私のコメントコントローラー
class CommentsController < ApplicationController
def create
@user = User.find(params[:user_id])
@comment = @user.comments.build(params[:comment])
@comment.commenter_id = current_user.id
if @comment.save
.........
else
.........
end
end
end
user_id
これは、データベースとデータベースの両方に正常に保存commenter_id
されます。私の問題は、ショーページにユーザーコメントを表示するときに発生します。特定のプロファイルにコメントしたユーザーの名前を取得したい。
私のユーザーコントローラーで
def show
@user = User.find(params[:id])
@comments = @user.comments
end
からユーザーの名前を取得したいのですが、のようなものを試してみるとcommenter_id
エラーがスローされ続けます。ただし、正常に動作しますが、必要なものが返されません。関連付けが正しく行われていないと推測しています。undefined method 'commenter' for #<Comment:0x007f32b8c37430>
comment.commenter.name
comment.user.name
commenter_idから名前を取得するために、モデルで正しい関連付けを取得するためのサポートが必要です。
私の最後の質問、コメントフォームのエラーをキャッチするにはどうすればよいですか?form_for(@user)
それはあなたが好きな通常ではありません@user.errors.any?
。
ルート.rb
resources :users do
resources :comments, only: [:create, :destroy]
end