我有两种模式:
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_unit
与Product
进行比较。我只是不知道如何在SQL中编写它。所以它应该是这样的:
Subscription
我怎么写这个?
答案 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