如何创建比较关联的范围?

时间:2012-04-10 20:35:41

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我有两种模式:

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

在我的产品模型中,我正在尝试制作一个范围,将price的{​​{1}}或cost_per_unitProduct进行比较。我只是不知道如何在SQL中编写它。所以它应该是这样的:

Subscription

我怎么写这个?

1 个答案:

答案 0 :(得分: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