我正在使用Rails 4,并且很难弄清楚如何设置我的模型,以便一个用户可以为另一个用户留下反馈。
我试着按照下面这个问题的答案:rails 4 users reviews for users how to do this
我的模型是:用户,个人资料,反馈
各模式之间的联系如下:
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的属性。
在我的个人资料显示页面中,我有一个指向反馈部分的链接:
<%= render "feedbacks/feed" %> 该部分则有:
<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语句。
我对上述各点有几个问题:
有人能帮忙吗?也许有另一种方法来解决这个问题,我希望能帮助你找到它。我找到的那篇文章被投得太宽泛了,但我找不到任何其他关于这个问题的更具体方面的参考资料。
发布于 2015-09-17 05:32:02
我的方法应该是使用多态关联。创建一个多态模型。
class Feedback < ActiveRecord::Base
belongs_to :reviewer, polymorphic: true
belongs_to :reviewable, polymorphic: true
end在我的多态模型建立之后,我创建了您可以将其作为行为包含在用户模型中的关注点。
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您的用户模型应该如下所示。
class User
include Reviewer #user is behaving as a reviewer
include Reviewable #user is behaving as a reviewable entity
end在设置了所有这些之后,您就可以开始使用一个可重用模块,它也将与任何其他模型一起工作。
userA.given_reviews #reviews posted by the user A
userA.received_reviews #reviews other people have given about user A发布于 2015-09-17 07:33:34
反馈类是来自用户评审者的一个连接。上面应该有两个外键。供用户和审阅者使用。让他们都是belongs_to。
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方法所破坏。
在那之后,你会很棒的。
https://stackoverflow.com/questions/32622838
复制相似问题