Rails4多态,具有自引用功能



我对Rails很陌生,所以这个问题可能有点奇怪。。。我正在构建一个系统,在这个系统中,我希望Users能够将Feedback留给其他用户,也可以留给他们从他们那里购买的Item。想想易趣的反馈,他们会问:你对商品满意吗你会建议和乔一起工作吗

反馈模型具有明显的多态性,因为它可以是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 的所有反馈

我不确定回答自己问题的政治性,但我会把这个答案留给任何有同样疑问的人。。。

对于那些开始阅读STI或多对多:通过等的人来说,实现这一点似乎要容易得多。

我最终在用户模型中做了以下操作:

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

现在我可以做:

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

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

最新更新