- 论坛徽章:
- 0
|
让查询变得更优雅
RailsWhere可以让代码变得更简洁。
看一下插件的自述文件。
Ruby代码
- === Returning SQL
- sql = Where.new('x=?',5).and( Where.new('x=?',6).or('x=?',7)).to_s
- # returns (x=5) and ( (x=6) or (x=7) )
-
- === Building a complicated where clause made easy
-
- def get_search_query_string
- where = Where.new
- where.and('users.first_name like ?', params[:search_first_name] + '%') unless params[:search_first_name].blank?
- where.and('users.last_name like ?', params[:search_last_name] + '%') unless params[:search_last_name].blank?
-
- status_where = Where.new
- for status in params[search_statuses].split(',')
- status_where.or 'status=?', status
- end
- where.and status_where unless status_where.blank?
-
- where.to_s
- end
-
- User.find(:all, :conditions => get_search_query_string)
-
- === Inline
-
- User.find(:all, :conditions => Where.new('first_name like ?', 'Tim').and('last_name like ?', 'Harper'))
复制代码 Rails2.2.2下可以直接运行,Rails2.3.4的话,需要进行小小的改动:
Ruby代码
- # RAILS_ROOT/vendor/railswhere/lib/where.rb
- # 2.2.2
- @criteria = ActiveRecord::Base.send(:sanitize_sql_array, criteria)
- # 2.3.4
- @criteria = ActiveRecord::Base.send(:sanitize_sql_array, criteria, nil)
复制代码 |
|