2010-11-26 3 views
0

Я работаю на QA месте, где у меня есть модель Вопрос и модель ответа и связь между ними, какНесколько ассоциаций между одной и той же модели в Rails

class Question < ActiveRecord::Base 
    has_many :answers 
end 

Мои ответы модель

class Answer < ActiveRecord::Base 
    belongs_to :question 
end 

Теперь мне нужно создать другую связь между вопросом и ответом, где я могу получить доступ к одному ответу, который автор вопроса находит лучшим. Так что мне нужно что-то вроде

class Question < ActiveRecord::Base 
    has_many :answers 
    has_one :accepted_answer, :class_name => 'Answer', :foreign_key => ['answer_id, accepted'] 
end 

Это объединение не справедливо, как у меня нет никакого способа указать, что я принял ожидать, чтобы быть правдой, и я получаю ошибку MySQL. Есть ли способ заставить это работать, используя логический как составной внешний ключ?

MySQL server version for the right syntax to use near '["answer_id", "accepted"] = 30) LIMIT 1' at line 1: SELECT  `answers`.* FROM  `answers` WHERE  (`answers`.["answer_id", "accepted"] = 30) 

Решение, которое я до сих пор работаю создает ассоциацию с ответами на вопрос следующим образом

class Answer < ActiveRecord::Base 
    belongs_to :question 

    has_one :inverse_accepted_answer, :class_name => 'Question', :foreign_key => 'accepted_id' 

end 

и вопрос, как

Class Question < ActiveRecord::Base 
belongs_to :answer, :foreign_key => 'accepted_id' 
has_many :answers 
end 

Проблема в этом случае я получить доступ выбранный ответ как Question.find (10) .answer вместо того, чтобы использовать более выразительное имя как selected_answer.

Есть ли способ, которым я могу определить имя для отношения from belongs_to end. Во-вторых, что было бы правильным путем. Техника, которую я, кажется, окрестные исправить

Я использую Rails 3 и рубин 1.9.2

Заранее спасибо

ответ

1

, что о чем-то вроде этого:

has_one :accepted_answer, :class_name => 'Answer', :conditions => "accepted = true" 
+0

Кажется, что необходимо сделать трюк. Удивительно, я никогда об этом не думал. – Sid 2010-12-01 06:00:52

Смежные вопросы