Я создаю сайт в Ruby on Rails, у меня есть две модели: модель User
и модель Transaction
.
Обе эти модели принадлежат учетной записи, поэтому у них есть поле с именем account_id
Я пытаюсь установить связь между ними следующим образом:
class User < ActiveRecord::Base
belongs_to :account
has_many :transactions
end
class Transaction < ActiveRecord::Base
belongs_to :account
belongs_to :user
end
Я использую эти ассоциации вот так:
user = User.find(1)
transactions = user.transactions
В данный момент приложение пытается найти транзакции с user_id
, вот SQL, который оно генерирует:
Mysql::Error: Unknown column 'transactions.user_id' in 'where clause': SELECT * FROM `transactions` WHERE (`transactions`.user_id = 1)
Это неверно, так как я хотел бы найти транзакции через account_id
, я попытался установить ассоциации следующим образом:
class User < ActiveRecord::Base
belongs_to :account
has_many :transactions, :primary_key => :account_id, :class_name => "Transaction"
end
class Transaction < ActiveRecord::Base
belongs_to :account
belongs_to :user, :foreign_key => :account_id, :class_name => "User"
end
Это почти достигает того, что я ищу, и генерирует следующий SQL:
Mysql::Error: Unknown column 'transactions.user_id' in 'where clause': SELECT * FROM `transactions` WHERE (`transactions`.user_id = 104)
Номер 104
является правильным account_id
, но он все еще пытается запросить таблицу транзакций для поля user_id
. Может кто-нибудь дать мне несколько советов о том, как настроить ассоциации для запроса таблицы транзакций для account_id
вместо user_id
, что приводит к SQL-запросу, например так:
SELECT * FROM `transactions` WHERE (`transactions`.account_id = 104)
Приветствия
Eef