在自定义高级搜索表单中,执行查询以过滤结果的最佳方法是什么?
class UsersController < ApplicationController
def index
@users = User.all
end
end
在许多情况下,我们有不同类型的数据,例如:
name
将是一个字符串,surname
将是一个字符串,age
将是一个整数
在我的具体情况下,我有一个表单,其中包含一些用户可以填写或不能填写的过滤器。我该如何进行动态查询?
答案 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的解决方案,发现它非常有用。您将提供模块(关注),并将此模块包含在您需要的类中。如果你已经有胖模型,这种方法也很好