Rails正在寻找条件?

时间:2010-10-18 19:24:33

标签: ruby-on-rails ruby-on-rails-3

在Rails 3中,我创建了一个搜索表单,在模型文件中使用条件执行查找。

  @projects = find(:all,
                :select => 'projects.*',
                :conditions => ['name = ?', search_name]
                ).first

如果在searchform(search_name)中提供了名称,则此方法很有用。问题是如果search_name为空,Rails错误(不能说我责备它)......

处理这种情况的聪明方法是什么?我想,如果search_name为空,则不是错误,而是返回所有内容。

连连呢?谢谢!

3 个答案:

答案 0 :(得分:5)

您可以创建一个范围来处理此问题。在项目模型中,添加如下内容:

scope :search_by(name), lambda{|name| first.where(:name => name) unless name.blank?}

然后在您的控制器中,只需致电:

Project.search_by(params[:search])

编辑:

如果您需要搜索多个字段,您可以调整范围:

范围:search_by(name),lambda {| name | first.includes(:owner).where(“projects.name LIKE?OR owners.name LIKE?”,name,name)除非name.blank?}

答案 1 :(得分:3)

if search_name.blank?
  @projects = Project.order(:name)
else
  @projects = Project.where(:name => search_name)
end

答案 2 :(得分:1)

最干净的方法是使用延迟加载和新的ActiveRecord功能,如下所示:

@projects = Project.order(:name) @projects = @ projects.where(:name => search_name)if search_name

您可以通过这种方式添加任意数量的条件。在你需要结果之前不会执行它们(使用@project.all或@project.each等...)