写命名范围的更好方法是什么?

kru*_*hah 1 ruby named-scope ruby-on-rails

这个命名范围工作正常.

named_scope :search, lambda {|search_txt|
      {
        :conditions => ["field1 like ? or field2 like ? or field3 like ?","#{search_txt}%","#{search_txt}%","#{search_txt}%"]
      }
  }
Run Code Online (Sandbox Code Playgroud)

而不是在条件下三次写search_txt.在条件中只传递一次search_txt可以处理相同的场景吗?

就像是

named_scope :search, lambda {|search_txt|
      {
        :conditions => ["field1 like ? or field2 like ? or field3 like ?","#{search_txt}%"]
      }
Run Code Online (Sandbox Code Playgroud)

}

Wuk*_*ank 7

我不知道这是否适用于范围,但还有另一种写条件的方法:

MyModel.all(:conditions=>['field_1 LIKE :q OR field_2 LIKE :q OR field_3 LIKE :q', {:q=> 'search_txt'}])
Run Code Online (Sandbox Code Playgroud)