浏览 88 次
|
该帖已经被评为新手帖
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-07-19
请教个rails查询问题,
WEB常有指定条件查寻的功能。 用户输入查寻条件内容不一定。输入内容则需要根据该条件查寻,不输入内容则跳过该条件。 虽然可以拼SQL字符串,但有没有更专业点的做法呢,比如用查询占位符,该怎么写呢? 我目前用的是 rails 1.2版本。 谢谢 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-07-20
|
|
| 返回顶楼 | |
|
时间:2008-07-30
本来我是想将关于此查询的demo放在我回答的问题后面的,现在lz采纳我的答案,没有办法,放在这里了.用Where插件比较方便实现这个.
插件地址:http://code.google.com/p/railswhere/ 先来一个简单一点的 User.find(:all, :conditions => Where{|w| w.and "first_name like ?", "#{first_name}%" if params[:first_name] w.and "last_name like ?", "#{last_name}%" if params[:last_name] } 再来一个嵌套的查询: w = Where.new for field in [:first_name, :last_name, :phone, :email] w.and('#{field} like ?', params[:search][field] + '%') unless params[:search][field].blank? end w.and { |sw| for status in params[search][:statuses].split(',') sw.or 'status=?', status end } User.find(:all, :conditions => w.to_s) # '(first_name like 'tim%') and (last_name like 'harper%') and ( (status = 'new') or (status = 'expired'))' 联合查询 w = Where.new("id=5") y = Where.new("first_name='tim'") User.find(:all, :conditions => (w | y)) # '(id=5) OR (first_name='tim')' User.find(:all, :conditions => (w & y)) # '(id=5) AND (first_name='tim')' 否定形式的查询 w = Where.new w.and_not { |ww| ww.or "x=1" ww.or "x=2" ww.or "x=3" } User.find(:all, :conditions => w.to_s) # 'not ((x=1) or (x=2) or (x=3))' Enjoy it!! |
|
| 返回顶楼 | |




