Ruby on rails Rails:用户对其他用户的反馈
我使用的是Rails 4,我很难弄清楚如何设置我的模型,以便一个用户可以给另一个用户留下反馈 我已尝试按照所附问题的答案回答: 我的模型是:用户、个人资料、反馈 模型之间的关联是:Ruby on rails Rails:用户对其他用户的反馈,ruby-on-rails,model-associations,Ruby On Rails,Model Associations,我使用的是Rails 4,我很难弄清楚如何设置我的模型,以便一个用户可以给另一个用户留下反馈 我已尝试按照所附问题的答案回答: 我的模型是:用户、个人资料、反馈 模型之间的关联是: 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 :
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'
反馈表具有名为:comment(text)、:reviewer(integer)和:created_at(datetime)的属性。审阅者需要是留下反馈的用户的用户id
用户模型具有:first\u name和:last\u 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>
我想从上面看到的是向任何可以在用户(接收反馈)配置文件页面上阅读反馈的用户显示反馈。如果没有反馈或当前用户无法查看反馈,则应应用else语句
我对上述内容有几个问题:
有人能帮忙吗?也许有另一种方法来解决这个问题,我会很感激你能帮我找到它。我找到的SO帖子被投票选得太广泛了,但我找不到任何其他关于这个问题的更具体方面的参考资料。我的方法是使用多态关联。创建一个多态模式l
class Feedback < ActiveRecord::Base
belongs_to :reviewer, polymorphic: true
belongs_to :reviewable, polymorphic: true
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
反馈类是来自user reviewer的联接。它应该有两个外键。对于user和reviewer。使它们都属于
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,它希望外键位于关联类上。按照您编写外键的方式,这意味着反馈id在用户身上,但这没有意义。请改为将其设置为“属于”
将reviewer更改为reviewer\u id并将其添加到反馈模型中。这样,数据库列生成的reviewer方法将不会被来自所属对象的reviewer方法所破坏
之后,你会很好。谢谢-我会尝试一下,让你知道Hi swards-我不明白。我没有审阅者模型。它只是我反馈表中的一个属性。我在反馈表中有用户id,但这引用了接收反馈的用户。这就是为什么反馈属于用户(与接收反馈的用户相同)对-他们需要class_name属性来识别类。我的部分输入错误。我们将其称为审阅者,但它实际上只是一个用户。因此,反馈模型中的审阅者id将被分配给用户id,因为审阅者的模型关联指向用户模型?非常感谢您的帮助嘿-我正在尝试查看这是否rks,但我仍然收到这个错误?一些帖子说这意味着我缺少了一个或我有一个太多了。语法错误,意外的tIDENTIFIER,需要关键字\u then或“;”或“\n”…&@user.feedback.comment。!blank实际上我用and替换了&&(我认为它们可以互换).但现在我得到了这个错误:nil:NilClass的未定义方法'feedback'
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