2013-06-19 5 views
0

У меня есть три таблицы: вопрос, question_choices и ответ.Rails has_one через отношения

Вопрос

  • ID
  • Имя
  • Tag

Question_Choice

  • ID
  • Question_id
  • Этикетка
  • Значение

отклика

  • ID
  • USER_ID
  • Question_id
  • Значение

Учитывая ответ, я ж ant, чтобы увидеть тег вопроса и метку question_choice. Получение ответа или выбора, связанного с вопросом, не проблема, но получение ответа на выбор зависит от того, что мне нужно сказать «значение = значение». Я попытался установить связь :has_one, :through => :question, но я не уверен, как выразить материал «value = value». Мне просто нужно использовать raw sql?

ответ

1

Я предполагаю, что вы не хотите менять структуру таблицы (это было бы самым простым решением). Это решение для текущей структуры таблицы:

приложения/модель/question.rb

class Question < ActiveRecord::Base 
    has_many :question_choices 
end 

приложения/модель/question_choice.rb

class QuestionChoice < ActiveRecord::Base 
    belongs_to :question 
end 

приложение/модели /response.rb

class Response < ActiveRecord::Base 
    belongs_to :question 
    belongs_to :question_choice, :primary_key => 'value', :foreign_key => 'value', :conditions => proc { "question_id = #{self.question_id}" } 
end 

Response.first.question_choice предоставит вам question_choice первых response.

+0

стрела. это оно. качающий ответ человек! – netricate

0

Я угадываю, у вопросов есть много вариантов выбора, и что ответы имеют один «выбранный» вопрос. Чтобы смоделировать это, вам понадобится прямая связь между ответом и выбором вопроса, например.

class Question < ActiveRecord::Base 
    has_many :question_choices 
end 

class QuestionChoice < ActiveRecord::Base 
    belongs_to :question 
end 

class Response < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :question 
    belongs_to :question_choice 
end 

Это означает, что вам нужно будет добавить question_choice_id столбец в таблице responses.

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