0

My Rails 应用程序允许用户创建描述他们与其他用户关系的“连接”。用户可以评论其他用户的博客文章(这里称为“作品”),并且对于博客文章上的每条评论,我想显示用户与作者的关系。我在工作控制器中创建实例变量时遇到问题。

这是我到目前为止在works控制器中的显示操作中所拥有的内容:

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实例变量的帮助,特别是分配otheruser_id:参数的内容。我知道这需要是发表评论的用户的 user_id。但是,我对如何获取此 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

一旦你回答我的评论,我会在实例变量上更新你。但是,如果有两种方式,Bachan 的答案应该可以做到。

编辑:

在您谈到单向关系之后,我认为您不应该创建@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 回答
1

请尝试一下

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