Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails中使用多列搜索_Ruby On Rails - Fatal编程技术网

Ruby on rails 在Rails中使用多列搜索

Ruby on rails 在Rails中使用多列搜索,ruby-on-rails,Ruby On Rails,使用命令时: @items = Item.find(:all,:order => 'name', :conditions => ["name LIKE ?", "%#{params[:key]}%"]) 这很好,但是搜索只基于一个列。如何让它搜索其他列,如描述、类别?我假设您使用的是Rails 2,因为您使用的是ActiveRecord 2样式的语法。您只需添加其他列作为附加条件,如下所示: key = "%#{params[:key]}%" @items = Item.find(

使用命令时:

@items = Item.find(:all,:order => 'name', :conditions => ["name LIKE ?", "%#{params[:key]}%"])

这很好,但是搜索只基于一个列。如何让它搜索其他列,如描述、类别?

我假设您使用的是Rails 2,因为您使用的是ActiveRecord 2样式的语法。您只需添加其他列作为附加条件,如下所示:

key = "%#{params[:key]}%"
@items = Item.find(:all, :conditions => [
  'name LIKE ? OR description LIKE ? OR category LIKE ?',
   key, key, key
], :order => 'name')
key = "%#{params[:key]}%"
@items = Item.where('name LIKE :search OR description LIKE :search OR category LIKE :search', search: key).order(:name)
以下是您在Rails 3中的操作方法,以供参考:

key = "%#{params[:key]}%"
@items = Item.where('name LIKE ? OR description LIKE ? OR category LIKE ?', key, key, key).order(:name)

如果您有15列要搜索,那么您将重复键15次。您可以这样编写,而不是在查询中重复键15次:

key = "%#{params[:key]}%"
@items = Item.find(:all, :conditions => [
  'name LIKE ? OR description LIKE ? OR category LIKE ?',
   key, key, key
], :order => 'name')
key = "%#{params[:key]}%"
@items = Item.where('name LIKE :search OR description LIKE :search OR category LIKE :search', search: key).order(:name)
它会给你同样的结果


谢谢

MetaWhere已被Squeel(同一作者)取代