代码之家  ›  专栏  ›  技术社区  ›  sosborn

手动管理关联可以吗?

  •  0
  • sosborn  · 技术社区  · 14 年前

    以下是相关型号:

    用户 订单

    一个订单有一个买家,一个卖家和一个产品

    我知道我可以用orders和user之间的HABTM关系来实现这一点,但在我看来,在Order表中放入以下列会更简单:

    :卖家id :买方id

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   Salil    14 年前

    不,这不是一个ruby方式,虽然你没有编辑顺序一旦创建。

    在模型中使用以下关系,我认为它会起作用。但没有支票

    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
  •  0
  •   Harish Shetty    14 年前

    您应该为此使用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