AnA*_*ice 1 ruby-on-rails ruby-on-rails-3
在Rails 3中,我创建了一个搜索表单,在模型文件中使用条件执行查找.
@projects = find(:all,
:select => 'projects.*',
:conditions => ['name = ?', search_name]
).first
Run Code Online (Sandbox Code Playgroud)
如果在searchform(search_name)中提供了名称,则此方法很有用.问题是如果search_name为空,Rails错误(不能说我责备它)......
处理这种情况的聪明方法是什么?我想,如果search_name为空,则不是错误,而是返回所有内容.
建议?谢谢!
您可以创建一个范围来处理此问题.在Project模型中,添加如下内容:
scope :search_by(name), lambda{|name| first.where(:name => name) unless name.blank?}
Run Code Online (Sandbox Code Playgroud)
然后在你的控制器中,只需调用:
Project.search_by(params[:search])
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您需要搜索多个字段,您可以调整范围:
scope:search_by(name),lambda {| name | first.includes(:owner).where("projects.name LIKE?OR owners.name LIKE?",name,name)除非name.blank?}
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |