Rails 加入查询
Rails join query
我是 rails 的新手,老实说,即使经过多次研究,我仍然在为查询而苦苦挣扎。
这是我的简单架构:
所以基本上,一个问题有很多选项,一个选项属于一个问题,有很多答案,一个答案属于一个选项,有很多用户。
我认为没有必要 post 模型代码,因为它就像我上面提到的那样。
我想做的是给出一个问题选项,查看特定用户是否已经检查过它(因此请查看答案 table 是否有匹配给定 id_option 的行, user_id 和 user_type)。所以在我的 haml 循环中,当显示不同的问题选项时,我正在调用我的 question_option 模型的方法,就像这样:
- question.question_option.all.each do |option|
#{option.title}
.check
- if option.selected_by(current_actor)
= check_box_tag(option.id, "checked",true, class: 'styled-checkbox')
- else
= check_box_tag(option.id, "checked",false, class: 'styled-checkbox')
和调用的方法:
def selected_by(answerer)
answer_match =
::Vacancies::QuestionOption
.joins(:answers)
.where(answerer_id: answerer.id, answerer_type:answerer.type )
response = answer_match.find(self.id)
return response
end
此方法位于我的 QuestionOption 模型中,不会导致任何错误,但它永远不会工作。
你能帮我转换这个查询以使其与 ActiveRecord 一起工作吗?谢谢
试试下面的代码。它检查用户是否在问题的参数中传递了任何答案。我想这也是你打算做的-
def selected_by(answerer)
answers =
Answer.where(answerer_id: answerer.id, answerer_type:answerer.type, id_option: self.id)
answers.exists?
end
我是 rails 的新手,老实说,即使经过多次研究,我仍然在为查询而苦苦挣扎。 这是我的简单架构:
所以基本上,一个问题有很多选项,一个选项属于一个问题,有很多答案,一个答案属于一个选项,有很多用户。
我认为没有必要 post 模型代码,因为它就像我上面提到的那样。
我想做的是给出一个问题选项,查看特定用户是否已经检查过它(因此请查看答案 table 是否有匹配给定 id_option 的行, user_id 和 user_type)。所以在我的 haml 循环中,当显示不同的问题选项时,我正在调用我的 question_option 模型的方法,就像这样:
- question.question_option.all.each do |option|
#{option.title}
.check
- if option.selected_by(current_actor)
= check_box_tag(option.id, "checked",true, class: 'styled-checkbox')
- else
= check_box_tag(option.id, "checked",false, class: 'styled-checkbox')
和调用的方法:
def selected_by(answerer)
answer_match =
::Vacancies::QuestionOption
.joins(:answers)
.where(answerer_id: answerer.id, answerer_type:answerer.type )
response = answer_match.find(self.id)
return response
end
此方法位于我的 QuestionOption 模型中,不会导致任何错误,但它永远不会工作。 你能帮我转换这个查询以使其与 ActiveRecord 一起工作吗?谢谢
试试下面的代码。它检查用户是否在问题的参数中传递了任何答案。我想这也是你打算做的-
def selected_by(answerer)
answers =
Answer.where(answerer_id: answerer.id, answerer_type:answerer.type, id_option: self.id)
answers.exists?
end