Rails:有什么方法可以重构这个ActiveRecord代码?

时间:2010-09-23 23:26:28

标签: ruby-on-rails ruby activerecord refactoring

我有一段代码可以检查用户选择调查问题的调查回复实际上是一个有效的选择:

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

有更简单的方法吗? 谢谢!

1 个答案:

答案 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