Ruby on rails 双轨模型的反馈模型

Ruby on rails 双轨模型的反馈模型,ruby-on-rails,associations,Ruby On Rails,Associations,我有两种型号-客户和承包商。我设置了一个简单的应用程序,它们在活动中进行交互。最后,我想让他们互相留下反馈。没有什么复杂的,只是一个数据库字段comment 我想知道什么是正确的模型协会在这里 我试过这个 class Customer has_many :feedbacks end class Contractor has_many :feedbacks end class Feedback belongs_to :customer belongs_to :contract

我有两种型号-
客户
承包商
。我设置了一个简单的应用程序,它们在
活动中进行交互。最后,我想让他们互相留下反馈。没有什么复杂的,只是一个数据库字段
comment

我想知道什么是正确的模型协会在这里

我试过这个

class Customer 
  has_many :feedbacks
end

class Contractor
  has_many :feedbacks
end

class Feedback
  belongs_to :customer
  belongs_to :contractor
end
但这里的问题是确定谁评论了谁

例如,如果我这样做

customer = Customer.find(1)
contractor = Contractor.find(1)
customer.feedbacks.create(:comment => "Contractor 1 sucks", :contractor_id => 1)
问题是,
承包商.反馈
客户.反馈
都可以访问它。我不知道现在谁评论了谁

感谢您的指导。我错过什么了吗


谢谢

这样做的方法是使用

这样,您就可以拥有一个
commenter
关系和一个
commentable
关系

像这样:

class Customer 
  has_many :feedbacks, as: commenter
  has_many :feedbacks, as: commentable
end

class Contractor
  has_many :feedbacks, as: commenter
  has_many :feedbacks, as: commentable
end

class Feedback
  belongs_to :commenter, polymorphic: true
  belongs_to :commentable, polymorphic: true
end
现在,
反馈
将需要四个新列:

  • 可注释类型:字符串
  • commentable\u id:integer
  • commenter\u类型:字符串
  • commenter\u id:integer
所有四个都应该编制索引,因此适当地编写迁移。
type
列将存储相关型号名称的字符串值(“客户”或“承包商”)

因此,您可以执行以下操作:

  @feedback = Feedback.find 3
  @feedback.commenter
    => # Some Customer

  @feedback.commentable
    => # Some Contractor
反之亦然。您希望:

@customer = Customer.find 1
@contractor = Contractor.find 1
@feedback = Feedback.new comment: "This is a great Contractor"
@feedback.commenter = @customer  # You can reverse this for a contractor giving feedback to a customer
@feedback.commentable = @contractor
@feedback.save!

公司或承包商是一回事吗?你好像换了一半是的,对不起,我把两件事弄混了。我已经更新了我的问题。你想要一些反馈应用于两者吗?例如,您有:
customer.feedbacks.create(:comment=>“Contractor 1 sucks”,:Contractor\u id=>1)
,它将“Contractor 1 sucks”反馈分配给客户和承包商。这就是你的意思吗?顺便说一句,反正我也不会那样做。我会做一些类似于
feedback=customer.feedbacks.create(:comment=>“Contractor 1 sucks”)
,然后将其分配给具有
Contractor.feedbacks的承包商。没有任何反馈在系统内。我正试图从头开始建造一个。客户可以给承包商留下反馈,反之亦然。我想你不明白我的问题。我的问题是:你想允许一个既适用于客户又适用于承包商的反馈吗?嘿,凯尔,不幸的是,
customer\u id
contractor\u id
被设置为零。有什么线索吗?其他两个字段可以很好地保存。当在视图中执行此操作时,
返回
NilClass
我可以为您提供更多帮助。到那时我才回家。使用您的代码和迁移编辑您的问题。也请观看我答案中第一个链接的视频。这将有助于回答许多问题。