0

我有三个表:question、question_choices 和 response。

问题

  • ID
  • 姓名
  • 标签

Question_Choice

  • ID
  • Question_id
  • 标签
  • 价值

回复

  • ID
  • 用户身份
  • Question_id
  • 价值

给定一个响应,我想查看问题标签和 question_choice 标签。获得与问题相关的回应或选择是没有问题的,但获得与选择相关的回应被证明具有挑战性,因为我需要说“价值=价值”。我已经尝试建立:has_one, :through => :question关系,但我不确定如何表达“价值=价值”的东西。我只需要使用原始sql吗?

4

2 回答 2

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

于 2013-06-19T20:20:29.007 回答
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_idresponses

于 2013-06-19T18:09:11.567 回答