Rails正在寻找条件?

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为空,则不是错误,而是返回所有内容.

建议?谢谢!

Yan*_*nis 5

您可以创建一个范围来处理此问题.在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?}