Ваше условие условия неверно.
Вы заявляете, что Order
has_many :payments, :as => :payable
Это говорит мне, что Payment
belongs_to :payable, :polymorphic => true
Это означает, что таблица payments
имеет два столбца примечания: payable_id
и payable_type
. Это также означает, что Payments
может применяться не только к Orders
, но и к другим моделям (CreditCardBalances
, кто знает).
Если вы хотите запросить платежи определенного типа, то есть принадлежащие какому-либо экземпляру определенного класса, вам нужно запросить поле payments.payable_type
. Это отлично работает:
Payment.find(:all, :conditions => "payable_type = 'Order'")
Вот суть , которая показывает, что я сделал, чтобы проверить это. Созданные модели настраиваются так же, как описано выше.
Не забывайте, что вы можете извлечь это в именованные области, если это проще:
named_scope :on_orders, :conditions => "payable_type = 'Order'"
Что делает его
Payment.on_orders
или динамически:
named_scope :on, lambda { |type| { :conditions => "payable_type = '#{type.to_s}'" } }
Что потом делает
Payment.on(Order) # or Payment.on(CreditCardBalance) or Payment.on("Order")