首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:用户对其他用户的反馈

Rails:用户对其他用户的反馈
EN

Stack Overflow用户
提问于 2015-09-17 04:55:08
回答 2查看 241关注 0票数 0

我正在使用Rails 4,并且很难弄清楚如何设置我的模型,以便一个用户可以为另一个用户留下反馈。

我试着按照下面这个问题的答案:rails 4 users reviews for users how to do this

我的模型是:用户,个人资料,反馈

各模式之间的联系如下:

代码语言:javascript
复制
User.rb
has_one :profile
has_many :feedbacks
accepts_nested_attributes_for :feedbacks

Profile.rb: belongs_to :user

Feedback.rb: 
belongs_to :user
  has_one :reviewer, :class_name => 'User', :foreign_key => 'reviewer'

反馈表具有名为:注释(文本)、:reviewer (整数)和:created_at(日期时间)的属性。审阅者需要是离开反馈的用户的用户id。

用户模型具有:first_name和:last_name的属性。

在我的个人资料显示页面中,我有一个指向反馈部分的链接:

代码语言:javascript
复制
<%= render "feedbacks/feed" %> 

该部分则有:

代码语言:javascript
复制
<div class="containerfluid">
  <div class="row">
    <div class="col-md-10 col-md-offset-1">

      <% if can? :read, @feedback && @user.feedback.comment.!blank %>
       <%= @profile.user.feedbacks.each do |feedback|%>

        <div class="row">
            <div class="col-md-10 col-md-offset-1">

                <%= @feedback.comment %>

            </div>
        </div>
        <div class="row">
            <div class="col-md-3">
                <div class="logobox">
                <%= "#{@user.feedback.reviewer.first_name} #{@user.feedback.reviewer.last_name}" %>

                </div>

            </div>

            <div class="col-md-3">
                <div class="logobox">
                <%= @feedback.try(:created_at).try(:strftime, '%d %B %Y') %>
                </div>
            </div>
            <% end %>
        <% else %>
            <%= render html: "No feedback available".html_safe %>   
        </div>

      <% end %>
    </div>
  </div>
</div> 

我想从上面的反馈是显示反馈给任何用户谁可以阅读反馈在用户的(收到反馈)配置文件页。如果没有反馈,或者current_user无法查看反馈,则应该应用else语句。

我对上述各点有几个问题:

  1. 我不知道如何遍历模型来链接到反馈。反馈部分显示在“配置文件显示”页面中。反馈属于用户,配置文件属于用户。
  2. 我收到指向上面第一行的错误(如果可以的话是<%?:read,@blank && user.feedback.comment.!%>。)这个错误表示它期待‘那么’。我从来没有使用‘然后’之前,它不工作,当我只是键入后空白。
  3. 我的反馈表中有一个名为:reviewer的整数属性。我希望在该字段中存储创建反馈(对另一个用户)的用户id。我不知道该怎么做。上面复制的这样一篇文章表明,我在反馈模型中放了一行,上面写着: has_one :评论员,:class_name => 'User',:foreign_key => 'reviewer‘。我试过了,但我不明白它在做什么。

有人能帮忙吗?也许有另一种方法来解决这个问题,我希望能帮助你找到它。我找到的那篇文章被投得太宽泛了,但我找不到任何其他关于这个问题的更具体方面的参考资料。

EN

回答 2

Stack Overflow用户

发布于 2015-09-17 05:32:02

我的方法应该是使用多态关联。创建一个多态模型。

代码语言:javascript
复制
class Feedback < ActiveRecord::Base 
  belongs_to :reviewer, polymorphic: true
  belongs_to :reviewable, polymorphic: true
end

在我的多态模型建立之后,我创建了您可以将其作为行为包含在用户模型中的关注点。

代码语言:javascript
复制
module Reviewer
  extend ActiveSupport::Concern

  included do
    has_many :given_reviews, as: :reviewer, dependent: :destroy
  end
end

module Reviewable
  extend ActiveSupport::Concern

  included do
    has_many :received_reviews, as: :reviewable, dependent: :destroy
  end
end

您的用户模型应该如下所示。

代码语言:javascript
复制
class User
  include Reviewer #user is behaving as a reviewer
  include Reviewable #user is behaving as a reviewable entity
end

在设置了所有这些之后,您就可以开始使用一个可重用模块,它也将与任何其他模型一起工作。

代码语言:javascript
复制
userA.given_reviews #reviews posted by the user A
userA.received_reviews #reviews other people have given about user A
票数 0
EN

Stack Overflow用户

发布于 2015-09-17 07:33:34

反馈类是来自用户评审者的一个连接。上面应该有两个外键。供用户和审阅者使用。让他们都是belongs_to。

代码语言:javascript
复制
User.rb
  has_one :profile
  has_many :feedbacks
  has_many :reviewers, :through => :feedbacks, :class_name => 'User'
  has_many :created_feedbacks, :class_name => 'Feedback', :foreign_key => 'reviewer_id'
  has_many :reviewed_users, :through => :feedbacks_left, :source => :user, :class_name => 'User'
  # Not sure if you need accepts nested attributes.

Feedback.rb: 
  belongs_to :user
  belongs_to :reviewer, :class_name => 'User' # foreign_key should be reviewer_id

注意-如果使用has_one或has_many,它希望外键位于关联类上。按照您编写的方式,这将意味着feedback_id是在用户身上,但这是没有意义的。把它变成一个belongs_to。

将审阅者更改为reviewer_id并将其添加到反馈模型中。然后,由数据库列生成的审阅者方法不会被来自belongs_to的reviewer方法所破坏。

在那之后,你会很棒的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32622838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档