2013-06-19 50 views
0

我有三个表:问题,question_choices和响应。Rails has_one通过关系

问题

  • ID
  • 名称
  • 标签

Question_Choice

  • ID
  • Question_id
  • 标签

响应

  • ID
  • USER_ID
  • Question_id

给定一个响应,I W ant来查看问题标签和question_choice标签。得到任何答案或选择与问题相关都没有问题,但获得与选择相关的回答是具有挑战性的,因为我需要说“价值=价值”。我试图建立一个:has_one, :through => :question关系,但我不知道如何表达“价值=价值”的东西。我只需要使用原始的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会给你第一个responsequestion_choice

+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表。