【问题标题】:Is it OK to manage associations manually?手动管理关联可以吗?
【发布时间】:2010-04-06 02:53:22
【问题描述】:

以下是相关模型:

用户 产品 订购

用户可以出售或购买产品 一个订单有一个买家、一个卖家和一个产品

我知道我可以通过订单和用户之间的 HABTM 关系来做到这一点,但在我看来,在订单表中放入以下列会更简单:

:seller_id :buyer_id

并手动管理这些关系,因为订单只创建一次并且从不编辑。但是,这似乎不太像 Rails,我想知道我是否在 HABTM 关系的概念上遗漏了一些东西。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    不,这不是一种红宝石方式,尽管您在创建订单后并未对其进行编辑。

    在模型中使用以下关系我认为它会起作用。虽然没有检查

    User.rb
    has_many :users
    has_many :purchase, :class_name =>Order, :foreign_key=>'buyer_id'
    has_many :sells, :class_name =>Order, :foreign_key=>'seller_id'
    
    Product.rb
    belongs_to :user
    has_many :orders
    
    Order.rb
    belongs_to :buyer, :class_name =>User, :foreign_key=>'buyer_id'
    belongs_to :seller, :class_name =>User, :foreign_key=>'seller_id'
    belongs_to :product
    

    【讨论】:

    • 谢谢,这很有道理。
    【解决方案2】:

    您应该为此使用 Rails 关联。 has_many 关联是您的方案的更好选择。

    class User < ActiveRecord::Base
      has_many :buys,  :class_name => "Order", :foreign_key => "buyer_id"
      has_many :sales, :class_name => "Order", :foreign_key => "seller_id"
    end
    
    class Product < ActiveRecord::Base
    end
    
    class Order < ActiveRecord::Base
      belongs_to :product
      belongs_to :buyer,  :class_name => "User", :foreign_key => "buyer_id"
      belongs_to :seller, :class_name => "User", :foreign_key => "seller_id"
    end
    

    现在您可以按如下方式使用关联:

    current_user.buys.create(:seller => u, :product => p)
    current_user.buys
    current_user.sells
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-23
      • 2017-11-12
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      相关资源
      最近更新 更多