0

我有两个模型:

class Subscription
  belongs_to :subscriber, :class_name => "User"
  belongs_to :subscribable, :polymorphic => true
end

class Product
  belongs_to :user
  has_many :subscriptions, :as => :subscribable, :dependent => :destroy
end

create_table :products do |t|
   t.string  :name
   t.decimal :price
   t.decimal :cost_per_unit
   t.integer :user_id
end

create_table :subscriptions do |t|
   t.string  :name
   t.decimal :price
   t.decimal :cost_per_unit
   t.integer :subscriber_id
   t.integer :subscribable_id
   t.string  :subscribable_type
end

在我的产品模型中,我试图制作一个将priceorcost_per_unit与. 我只是不知道如何用 SQL 编写它。所以它应该是这样的:ProductSubscription

class Product
  def self.lower_prices
   where( self.price < self.subscription.price OR self.cost_per_unit < self.subscription.cost_per_unit )
  end   
end

我怎么写这个?

4

1 回答 1

1

您需要在 where 子句中指定一个 sql 片段,并使用连接从订阅表中获取数据。

我无法访问我的开发机器来测试它,但这应该会为您指明正确的方向。

class Product
  has_many :subscriptions, :as => :subscribable, :dependent => :destroy
  self.lower_prices
   Product.includes(:subscription).
   where("products.price < subscriptions.price OR products.cost_per_unit < subscriptions.cost_per_unit" )
  end
end
于 2012-04-10T21:27:58.087 回答