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(同一作者)取代