Je crée un site en Ruby on Rails, j'ai deux modèles un modèle User
et un modèle Transaction
.Ruby on Rails - Clé primaire et étrangère
Ces modèles appartiennent tous deux à un compte afin qu'ils ont tous deux un champ appelé account_id
Je suis en train d'installer une association entre eux comme ceci:
class User < ActiveRecord::Base
belongs_to :account
has_many :transactions
end
class Transaction < ActiveRecord::Base
belongs_to :account
belongs_to :user
end
J'utilise ces associations comme ceci:
user = User.find(1)
transactions = user.transactions
au moment de l'application tente de trouver les transactions avec le user_id
, voici le SQL qu'il génère:
Mysql::Error: Unknown column 'transactions.user_id' in 'where clause': SELECT * FROM `transactions` WHERE (`transactions`.user_id = 1)
Ceci est incorrect que je voudrais la trouver les transactions via le account_id
, j'ai essayé de placer les associations comme ceci:
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
Ce permet généralement d'atteindre ce que je cherche à faire et génère les SQL suivante:
Mysql::Error: Unknown column 'transactions.user_id' in 'where clause': SELECT * FROM `transactions` WHERE (`transactions`.user_id = 104)
le numéro 104
est le account_id
correct, mais il essaye toujours d'interroger la table de transaction pour user_id
champ. Quelqu'un pourrait-il me donner quelques conseils sur la façon dont je configurer les associations pour interroger la table de transaction pour le account_id
au lieu du user_id
résultant dans une requête SQL comme ceci:
SELECT * FROM `transactions` WHERE (`transactions`.account_id = 104)
Vive
Eef
Vous devriez construire la réponse correctement avec la mise en évidence de la syntaxe correcte et indentation. – RatDon