0

私の Rails アプリでは、ユーザーは他のユーザーとの関係を説明する「接続」を作成できます。ユーザーは、他のユーザーのブログ投稿 (ここでは「作品」と呼びます) にコメントすることができます。ブログ投稿に対するコメントごとに、ユーザーと作者との関係を示したいと思います。Worksコントローラーでインスタンス変数を作成するのに問題があります。

Worksコントローラーのshowアクションでこれまでに持っているものは次のとおりです。

class WorksController < ApplicationController
def show 
  @work = Work.find(params[:id])
  @workuser = @work.user_id
  @connections = Connection.where(user_id: @workuser, otheruser_id: UNKNOWN).all
  @comment = @work.comments.build
  @comment.user = current_user
  @comments = @work.comments.order("created_at DESC").where(work_id: @work).all 
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @work }
    end
  end
 end

インスタンス変数、具体的にはパラメータ@connectionsに何を割り当てるかについて助けが必要です。これは、コメントを投稿したユーザーの user_id である必要があることは事実です。しかし、私はこのIDを取得する方法について困惑しています。otheruser_id:

モデルの関係は次のとおりです。

work.rb-  belonts_to :user, has_many :comments
user.rb-  has_many :works, has_many :comments, has_many :connections
connection.rb- belongs_to :user

他の情報を提供できる場合はお知らせください。どんな助けでも大歓迎です!

ありがとう!!

編集: コメント (ユーザー、作成者との関係、およびコメントの内容) を入力するビュー コードの簡略化されたバージョン:

<% @comments.each do |comment| %>

  <%= link_to comment.user.full_name, comment.user if comment.user %>,                                                  
  <%= @connections.description %>
  <%= @comment.content %>
   <% end %>
4

2 に答える 2

1

是非お試しください

@connections = Connection.where("user_id = ? OR otheruser_id = ?", @workuser, @workuser)
于 2013-07-04T14:16:26.137 に答える
1

私のコメントに答えたら、インスタンス変数を更新します。しかし、バチャンの答えは、その双方向であればそれを行うはずです.

編集:

一方向の関係についてあなたが言ったことの後、@connectionsインスタンス変数を作成するべきではないと思います。

代わりに、次のように user.rb モデルでメソッドを定義します。

def get_connection otheruser
 Connection.where(:user_id=>self.id,:otheruser_id=>otheruser.id).first
end

次に、ビューで.....だから、次のようなすべてのコメントを表示したい:

コメンテーター名

コメンテーターと作品作者のつながり

コメント内容

これを行うことができます:

<% @comments.each do |comment| %>
  <%= link_to comment.user.full_name, comment.user if comment.user %>                                                 
  <%= @work.user.get_connection(comment.user).description unless  @work.user.get_connection(comment.user).nil? %>
  <%= comment.content %>
<% end %>

コントローラ:

class WorksController < ApplicationController
def show 
  @work = Work.find(params[:id])
  @workuser = @work.user_id
  @comment = @work.comments.build
  @comment.user = current_user
  @comments = @work.comments.order("created_at DESC")
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @work }
    end
  end
 end
于 2013-07-04T15:01:32.387 に答える