论坛首页 入门讨论版 rails

rails查询问题

浏览 88 次
该帖已经被评为新手帖
作者 正文
时间:2008-07-19
请教个rails查询问题,
WEB常有指定条件查寻的功能。
用户输入查寻条件内容不一定。输入内容则需要根据该条件查寻,不输入内容则跳过该条件。

虽然可以拼SQL字符串,但有没有更专业点的做法呢,比如用查询占位符,该怎么写呢?
我目前用的是 rails 1.2版本。

谢谢
   
时间:2008-07-20
根据javaeye的规则,现将此贴转移到“问答”
http://www.javaeye.com/problems/1712
悬赏10分,还请高手们提点一下。
   
0 请登录后投票
时间: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!!
   
0 请登录后投票
论坛首页 入门讨论版 rails

跳转论坛:
JavaEye推荐