Я пытаюсь найти способ изменить отношение принадлежащие, has_many от нормального и ожидаемого (см. Ниже) поведения на обоих ...
'SELECT `transactions`.* FROM `transactions` WHERE `transactions`.`account_id` = 2'
на
'SELECT `transactions`.* FROM `transactions` WHERE `transactions`.`account_id` = 2' OR `transactions`.`transfer_id` = 3'
Текущая настройка ...
class Account < ActiveRecord::Base
has_many :transactions
end
class Transaction < ActiveRecord::Base
belongs_to :account
end
class CreateTransactions < ActiveRecord::Migration
def change
create_table :transactions do |t|
t.string :name,
t.references :account,
t.timestamps
end
end
end
Попытка решения ...
class Account < ActiveRecord::Base
has_many :transactions, :class_name => "Transaction", :finder_sql => ->(record) do
record = self if(record.nil?)
"SELECT * FROM transactions WHERE transactions.account_id = #{record.id} OR transactions.transfer_id = #{record.id}"
end
end
class Transaction < ActiveRecord::Base
belongs_to :transfer, :class_name => "Account", :foreign_key => 'transfer_id'
end
class CreateTransactions < ActiveRecord::Migration
def change
create_table :transactions do |t|
t.string :name,
t.references :account,
t.integer :transfer_id,
t.timestamps
end
end
end
Вопрос в том, как изменить значение по умолчанию, ГДЕ, чтобы включить ИЛИ.Добавление области или дополнения к has_many без использования foreign_key, похоже, приводит к ...
'SELECT transactions
. * FROM transactions
WHERE transactions
. account_id
= 2' (И transactions
. transfer_id
= 3 ')
Фактически все мои попытки использования рельсов обычными способами, кажется, приводят к вышесказанному.
Важность разработки того, какизмените отношение по умолчанию, чтобы все операторы выбора, ищущие account_id, также смотрели на Transfer_id.
Ваша помощь будет принята с благодарностью.