2014-04-25 3 views
3

J'ai les classes suivantes:Quelle serait cette relation?

class MockQuestion < ActiveRecord::Base 
    belongs_to :mock 
    belongs_to :question 
end 

class Mock < ActiveRecord::Base 
    has_many :mock_questions 
    has_many :answers 
end 

class Question < ActiveRecord::Base 
    has_many :mock_questions 
    has_many :answers 
end 

class Answer < ActiveRecord::Base 
    belongs_to :question 
    belongs_to :mock 
end 

Comme une réponse peut appartenir à une question et un Mock, je voudrais vous connecter au MockQuestion avec la même maquette et à la question.

Je l'interroger par:

Answers.where(question_id: question_id, mock_id: mock_id) 

Mais je voudrais faire quelque chose comme

MockQuestion.answers 

Y at-il relation que je peux utiliser pour le faire?

PS: la table des réponses a à la fois "mock_id" et "question_id"

Répondre

2

Pourquoi ne pas créer self.answers dans votre classe MockQuestion comme:

def answers 
    Answers.where(mock_id: self.mock.id, question_id self.question.id) 
end 

Et je ne pense pas que ce genre de relation est possible. D'où la méthode alternative

+0

Ouais, c'est ce que j'utilisais. Mais puisque ce n'est pas une relation, je ne peux pas le charger avec impatience. –

+1

Vous pouvez utiliser la commande join de rails pour le chargement impatient dans ce cas, voici un bon lien http://blog.bigbinary.com/2013/07/01/preload-vs-eager-load-vs-joins-vs-includes .html, cela vous aidera à démarrer. – Babar

Questions connexes