2015-06-03 5 views
1

В пользовательской расширенной форме поиска, как лучше всего выполнить запрос для фильтрации результатов?Rails 4 - Лучший способ выполнить расширенный поиск

class UsersController < ApplicationController 

    def index 
    @users = User.all 
    end 

end 

Во многих случаях мы имеем различные типы данных, например:

name будет строка, surname будет строка, age будет целым

В моем конкретном случае, У меня есть форма с некоторыми фильтрами, которые пользователь может или не может заполнить. Как я могу выполнить динамический запрос?

ответ

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 
+1

вы можете использовать 'соображения' для этой цели – usmanali

+0

, пожалуйста, следуйте этому правилу, чтобы использовать' заботы': http://stackoverflow.com/questions/14541823/how-to-use-concerns-in-rails-4 – usmanali

0

Попробуйте

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

OP сказал: 'пользователь может или не может заполнить '. Итак, можете ли вы ожидать 'params [: first_name]' каждый раз, когда пользователь отправляет форму? –

+0

попробуйте использовать такие параметры [: first_name] || "" –

0

После того, как я использовал решение от этого post, и нашел его очень полезно. Вы предоставите модуль (беспокойство) и включите этот модуль в классы, которые вам нужны. Также этот подход хорош, если у вас уже есть толстые модели