Matthieu Rioual
Matthieu Rioual

Reputation: 105

Rails join query

I am pretty new in rails and honestly, I am struggling with queries even after multiple researchs. Here is my simple schema:

enter image description here

So basically, a question has many options, an option belongs to a question and has many answer, and an answer belongs to an option and has many users.

I don't think it s necessary to post the models code since it is just like i mentioned above.

What i would like to do is given a question option, see if a particular user already checked it (so look in the answer table if there is a row matching a given id_option, user_id and user_type). So in my haml loop, when displaying the different question option, i'm calling a method of my question_option model just like this :

- 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')

and the method called :

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

This method is located in my QuestionOption model and leads to no errors but it s not working ever. Can you help me transform this query to make it work with ActiveRecord ? Thanks

Upvotes: 0

Views: 74

Answers (1)

Sachin Singh
Sachin Singh

Reputation: 1098

Try the below code. It checks if there are any answers by the user passed in the params on the question. I think this is what you intended to do as well-

def selected_by(answerer)
  answers =    
    Answer.where(answerer_id: answerer.id, answerer_type:answerer.type, id_option: self.id)

  answers.exists?
end

Upvotes: 1

Related Questions