join с polymorphic models

0 views
Skip to first unread message

alovak

unread,
Nov 6, 2009, 5:39:19 AM11/6/09
to RubyOnRails to russian
Коллеги, как красиво решить вот такую задачу:

есть модели:

class GatewayTransaction < ActiveRecord::Base
belongs_to :order
..
end

class Order < ActiveRecord::Base
has_many :transactions, :class_name => 'GatewayTransaction'
belongs_to :payment_method, :polymorphic => true
..
end

class PaymentMethod < ActiveRecord::Base
self.abstract_class = true

has_one :order, :as => :payment_method
..
end

class CreditCard < PaymentMethod
#attrs: first_6, last_4
end

class Check < PaymentMethod
end

Хотим сделать поиск по транзакциям, у которых платежное средство -
CreditCard и first_6, last_4 такие-то. Вот что-то типа такого:

GatewayTransaction.find(:all, :include => { :order =>
[ :payment_method ] }, :conditions => { :order => { :payment_method =>
{ :first_6 => '123456', :last_4 => '1234' } } } )

alovak

unread,
Nov 8, 2009, 5:19:11 AM11/8/09
to RubyOnRails to russian
Коллеги, если все так сложно. То, хотелось бы услышать ваши мысли
насчет вот такого решения.

Сделать отдельную модель (напр. GatewayTransactionIndex) куда
скидывать все поля из моделей, по которым будет делаться поиск +
индексы в базу. Например

class GatewayTransactionIndex < AR::Base
#payment_method_type, #payment_method_number, #order_email и т.п.
end

Тогда искаться будет проще:

GatewayTransaction.find(:all, :include => { :order =>

[ :payment_method ] }, :conditions => { :gw_transaction_index =>
{ :payment_method_type => 'CreditCard', :payment_method_number =>
'123456...1234' }})

Reply all
Reply to author
Forward
0 new messages