根据反馈模型采取以下关联:
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.feedbacks
,seller.feedbacks
,listing.feedbacks
)
在这个例子中,我们希望主要将它与买方联系起来nest the feedback routes within user
,然后在Feedbacks控制器中构建一个类似于以下内容的创建操作:
current_user.feedbacks.new(feedback_params)
buyer.feedbacks.new(feedback_params)
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文档,但未能找到结论。
答案 0 :(得分:0)
这里没有“正确”的方式 - 只需构建你想要的系统。听起来Buyer
Feedback
Listing
关于Seller
所售出的@seller
,所以把所有这些东西连在一起是完全合理的(或者至少亚马逊没有发现了一个尚不存在的理由,这是一个非常好的迹象。)
您可能正在寻找的最简单的“Rails方式”是在反馈表中包含所有相关ID。这确实使得那些可能想要摆弄的人可以使用它们,例如。通过将卖家/列表ID设置为自己的ID并留下欺诈性的积极反馈。您可以通过在控制器中合并@listing
和Transaction
(如您所提到的),或者通过审核人已经购买该项目的验证,不能留下多个等等来解决这个问题。
这听起来似乎还有Buyer
个对象的空间,代表Seller
,Listing
和Feedback
之间的链接。也许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。
多态关联是关联上的一种稍微高级的扭曲。使用多态关联,一个模型可以在单个关联上属于多个其他模型。