Rails: есть ли способ реорганизовать этот код ActiveRecord? - PullRequest
1 голос
/ 24 сентября 2010

У меня есть фрагмент кода, который проверяет, что ответ на опрос, выбранный пользователем, на самом деле является одним из допустимых вариантов:

Question.find_by_id(question_id).question_choices.all(:select => 'id').map {|x| x.id}.include?(user_choice_id)

Есть ли более простой способ? Спасибо!

1 Ответ

1 голос
/ 24 сентября 2010

Как минимум, компонент question_choices.all(:select => 'id').map {|x| x.id} можно переписать, так как ActiveRecord предоставляет метод для этого question_choice_ids.

Вы также можете просто сделать find вместо find_by_id. Я знаю, что find вызовет исключение, если ничего не найдено, но в любом случае вызовет question_choices на nil в вашем примере:

Question.find(question_id).question_choice_ids.include?(user_choice_id)

# or 

# Rails 2 (will run 2 queries unless you use :include)
Question.find(question_id).question_choices.first(:conditions => {:id => user_choice_id})

# Rails 3 (will only run 1 query)
Question.find(question_id).question_choices.where(:id => user_choice_id).first
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...