我有一段代码可以检查用户选择调查问题的调查回复实际上是一个有效的选择:
Question.find_by_id(question_id).question_choices.all(:select => 'id').map {|x| x.id}.include?(user_choice_id)
有更简单的方法吗? 谢谢!
答案 0 :(得分:1)
至少可以重写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