2

J'ai une application rails avec les modèles suivants:Rails association modèle multiple

User (id) 
Version (id, post_id, creator_id) 
Post (id) 

configuration Jusqu'à présent est la suivante:

User.rb:

has_many :versions 

Version.rb:

belongs_to :creator, :class_name => "User" 
belongs_to :post 

Post.rb:

has_many :versions 

Maintenant, je voudrais lier un utilisateur aux messages qu'il a à travers la table des versions, et pour rendre le pire, cette connexion doit être appelée questions. Je pensais quelque chose comme ceci:

Ajouté à User.rb:

has_many :questions, :class_name => "Post", :source => :post, :through => :versions 

Le problème est que cela ne fonctionne pas et ne devrait probablement pas, car il ne sait pas ce que le nom de la clé utilisateur est dans la tables de versions.

Message d'erreur:

SQLite3 :: SQLException: pas de colonne: versions.user_id:. SELECT COUNT (*) FROM "messages" INNER JOIN "versions" ON "messages" "id" = " versions ». "post_id" où "versions". "user_id"= 1

Je suis à une perte, aider!

Note: La seule relation qui ne fonctionne est la dernière d'une users <==> posts aka users.questions

+0

pas clair - la ligne 'has_many: questions,: class_name => "Post"' est que pour l'utilisateur ou la poste? Si pour poster, vous pouvez supprimer tous les trucs de publication. –

+0

J'ai clarifié, c'est dans le modèle User ... – Nayish

+1

Avez-vous envisagé d'utiliser 'vestal_versions' (https://github.com/laserlemon/vestal_versions) pour le versioning? –

Répondre

2

Cette configuration ne devrait fonctionner pour vous:

user.rb

has_many :versions, :foreign_key => 'creator_id' 
has_many :questions, :through => :versions 

version.rb

belongs_to :creator, :class_name => "User" 
belongs_to :question, :class_name => "Post", :foreign_key => 'post_id' 

post.rb

has_many :versions 

Vous pouvez maintenant accéder aux questions comme ceci: User.first.questions

+0

cela a le même problème ... même message d'erreur est donné ... – Nayish

+0

Etrange, puisque j'ai testé cela dans une nouvelle application de rails 3.1. Êtes-vous sûr de mettre "appartient à: question" (plutôt que: post) dans vos versions.rb? – emrass

+0

Notez également la définition de clé étrangère sur l'association de versions dans user.rb – emrass

Questions connexes