Rails 4 - 执行高级搜索的最佳方式

时间:2015-06-03 09:26:58

标签: mysql ruby-on-rails ruby activerecord

在自定义高级搜索表单中,执行查询以过滤结果的最佳方法是什么?

class UsersController < ApplicationController

  def index
    @users = User.all
  end

end

在许多情况下,我们有不同类型的数据,例如:

name将是一个字符串,surname将是一个字符串,age将是一个整数

在我的具体情况下,我有一个表单,其中包含一些用户可以填写或不能填写的过滤器。我该如何进行动态查询?

3 个答案:

答案 0 :(得分:0)

试试这个

User.where("name = ? or surname = ? or age = ? ", params[:first_name], params[:lastname], params[:age])

答案 1 :(得分:0)

在你的控制器中这样做:

class UsersController < ApplicationController

  def index
    @users = User.search params[:filter]
  end

end

然后在User模型中执行:

class User < ActiveRecord::Base
  def self.search(options = {})
    users = User.all
    users = users.where(name: options[:name] ) if options[:name].present?
    users = users.where(first_name: options[:first_name] ) if options[:first_name].present?
    users = users.where(last_name: options[:last_name] ) if options[:last_name].present?
    users = users.where(age: options[:age] ) if options[:age].present?
    users
  end
end

答案 2 :(得分:0)

一旦我使用了这个post的解决方案,发现它非常有用。您将提供模块(关注),并将此模块包含在您需要的类中。如果你已经有胖模型,这种方法也很好