0

私の子クラスは一方の親または他方の親に属することができますが、両方に属することはできないため、この問題が発生していると思います。私のコードとエラーをお見せしましょう。

class Purchase < ActiveRecord::Base # my child class
  # columns = user_id, price_id and unit_price_id
  belongs_to :user
  belongs_to :price
  belongs_to :unit_price

  scope :today, lambda { joins(:unit_price, :price).
                             where(:price => { :date => Date.today },
                                   :unit_price => { :date => Date.today } ) }
  def total
    self.price.sum(:amount) + self.unit_price.sum(:amount)
  end
end

そして、私の見解ではこれをやろうとするよりも:

<%= number_to_currency(current_user.purchases.today.map(&:total)) %>

しかし、これは私にエラーを与えます:

PGError: ERROR:  missing FROM-clause entry for table "price"
LINE 1: ...s"."price_id" WHERE "purchases"."user_id" = 3 AND "price"."d...
                                                             ^
: SELECT "purchases".* FROM "purchases" INNER JOIN "unit_prices" 
ON "unit_prices"."id" = "purchases"."unit_price_id" 
INNER JOIN "prices" ON "prices"."id" = "purchases"."price_id" 
WHERE "purchases"."user_id" = 3 AND "price"."date" = '2012-08-16' 
AND "unit_price"."date" = '2012-08-16'

ここで何を言っているのか正確にはわかりませんが、price_id が nil であるという考えがあります。これは正しいです?もしそうなら、どうすればこの問題を解決できますか? 修正として、PricePurchase と UnitPricePurchase という 2 つの個別の購入モデルを作成する必要がありますか?

どう考えているか教えてください。

ありがとうございました。

4

1 に答える 1

3

テーブルはエイリアス化されておらず、それらの名前は複数形 ( WHEREpricesではなくprice) であるため、おそらく次の変更が役立ちます。

where(:prices => { :date => Date.today },
                               :unit_prices => { :date => Date.today } ) }
于 2012-08-17T11:30:24.673 に答える