0

私は2つのモデルを持っています:

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またはcost_per_unitをと比較するスコープを作成しようとしProductていSubscriptionます。これをSQLで書く方法がわかりません。したがって、次のようになります。

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 に答える