属于多个其他对象的对象

时间:2016-03-11 14:24:20

标签: ruby-on-rails ruby ruby-on-rails-4

根据反馈模型采取以下关联:

feedback.rb

belongs_to :buyer, :foreign_key => :buyer_id, :class_name => "User"
belongs_to :seller, :foreign_key => :seller_id, :class_name => "User"
belongs_to :listing

反向关联为has_many

creating反馈对象时,它可以“锚定”到上述任何其他对象(例如buyer.feedbacksseller.feedbackslisting.feedbacks

在这个例子中,我们希望主要将它与买方联系起来nest the feedback routes within user,然后在Feedbacks控制器中构建一个类似于以下内容的创建操作:

current_user.feedbacks.new(feedback_params)

或参考更合适/更正?

buyer.feedbacks.new(feedback_params)  

如果没有明确的买方模式,这是否有效?

然后Rails如何合并其他belongs_to关系?

它不是嵌套属性(因为其他对象已经存在)。

我应该在其他参数中合并吗?

params.require(:feedback).permit(:rating, :comment).merge(seller_id: @seller.id, listing_id: @listing.id)

我看到的一种方法是以这种方式(来自不同的域)使用before_validation过滤器,如下所示:

class Feedback < ActiveRecord::Base
  belongs_to :user
  belongs_to :host, :class_name => "User"
  belongs_to :inquiry
  belongs_to :room

before_validation :set_room_and_guest_id

def set_room_and_guest_id
  self.room ||= self.inquiry.room if self.inquiry
  self.user ||= self.inquiry.user if self.inquiry
end

我花了很长时间阅读有关今天的相关帖子以及Rails文档,但未能找到结论。

3 个答案:

答案 0 :(得分:0)

这里没有“正确”的方式 - 只需构建你想要的系统。听起来Buyer Feedback Listing关于Seller所售出的@seller,所以把所有这些东西连在一起是完全合理的(或者至少亚马逊没有发现了一个尚不存在的理由,这是一个非常好的迹象。)

您可能正在寻找的最简单的“Rails方式”是在反馈表中包含所有相关ID。这确实使得那些可能想要摆弄的人可以使用它们,例如。通过将卖家/列表ID设置为自己的ID并留下欺诈性的积极反馈。您可以通过在控制器中合并@listingTransaction(如您所提到的),或者通过审核人已经购买该项目的验证,不能留下多个等等来解决这个问题。

这听起来似乎还有Buyer个对象的空间,代表SellerListingFeedback之间的链接。也许Transaction属于<?php namespace backend\modules\v1\controllers; use common\models\Geo; class GeoController extends ActiveController { public $modelClass = 'common\models\Geo'; }

总的来说,我会说你已经瘫痪了所有可用的选项,最好的办法是选择一个并运行它。当不清楚哪个方向最好时,通常是因为你还没有获得所需的所有信息,但是一旦你尝试了一些东西,你就会很快学到更多。一旦你意识到“哦,我应该以其他方式做到这一点”,代码之美就是你可以改变它。

答案 1 :(得分:0)

我假设每个商家信息只有一个买家和一个卖家,每个商家信息可能只有零个或一个反馈。然后,通过将反馈意见链接到买方和卖方,您可能会对此感到困惑。标准化的方式是将反馈与列表相关联,而不是其他任何内容。然后所有问题都消失了。

(注意,您仍然可以使用:through铁路关系直接从反馈中获取买方(或卖方)。)

答案 2 :(得分:0)

也许您正在寻找Polymorfic Associations

多态关联是关联上的一种稍微高级的扭曲。使用多态关联,一个模型可以在单个关联上属于多个其他模型。