0

わかりました、まだ私の道を学ぼうとしているレール上のルビーの初心者です。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.namecomment.user.name

commenter_idから名前を取得するために、モデルで正しい関連付けを取得するためのサポートが必要です。

私の最後の質問、コメントフォームのエラーをキャッチするにはどうすればよいですか?form_for(@user)それはあなたが好きな通常ではありません@user.errors.any?

ルート.rb

      resources :users do
         resources :comments, only: [:create, :destroy]
      end
4

1 に答える 1

0

モデルでこのようなことを試してください

class User < ActiveRecord::Base
  has_many :received_comments, :class_name => "Comment", :foreign_key => "user_id"
  has_many :given_comments, :class_name => "Comment", :foreign_key => "commenter_id"
end

class Comment < ActiveRecord::Base
  belongs_to :user # comment about profile
  belongs_to :commenter, :class_name => "User", :foreign_key => "commenter_id"
end

チェックアウト: http://guides.rubyonrails.org/association_basics.html

あなたはおそらく has_many コレクションでより良い命名を考え出すことができます.受け取って与えられたのは、私がすぐにできる最善のことでした:)

注: 多くの場合、foreign_key はオプションです。上に残しておいてください。明確にするのに役立つと思います。

  • has_many fk は、man テーブル (他のテーブル) の列を参照します。
  • belongs_to fk は、many テーブル (このテーブル) の列を参照します。
于 2013-02-02T20:58:10.823 に答える