Rails4多态与自引用

时间:2014-09-18 11:14:08

标签: ruby-on-rails-4

我对Rails很新,所以这个问题可能有点奇怪......我正在构建一个系统,我希望Users能够Feedback关于其他用户,但也关于他们从他们那里买的Item。想想他们提出的eBay反馈意见:您对该项目感到满意吗?您是否建议与Joe合作?

反馈模型显然是多态的,因为它可以是UserItem

类型

我拥有的是:

class User
    has_many :feedbacks, as: :feedbackable
end

class Item
    has_many :feedbacks, as: :feedbackable
end

class Feedback
    belongs_to :feedbackable, polymorphic: true
end

我遇到的问题是用户是反馈的创建者,也是相同反馈的接收者(可反馈)......

我如何实现这样的目标:

class User
   has_many :feedbacks  # feedback.user
   has_many :feedbacks, as: :feedbackable   #feedback.feedbackable.type_id
end

从某种意义上说,我可以获得用户A留给其他用户和项目的所有反馈,以及其他用户留给用户A的所有反馈

1 个答案:

答案 0 :(得分:0)

我不确定回答我自己的问题的政治,但我会在这里留下这个答案给任何处理同样疑问的人......

对于那些开始阅读有关STI或多对多的人:通过等等,似乎更容易实现这一目标。

我最终在用户模型中执行以下操作:

has_many :feedbacks
has_many :feedbacks_received, as: :feedbackable, :class_name => "Feedback"

现在我能做到:

user.feedbacks并获取此用户创建的所有反馈(在项目或用户上)

user.feedbacks_received并获取其他用户留下的有关此用户的所有反馈