2013-07-25 2 views
0

Например, у меня есть индекс действия:Как написать оператор case зависимости от ключа параметров?

def index 
    if params[:query] 
     @pharmaceutics = Pharmaceutic.where("name LIKE ?", params[:query]) 
    elsif params[:code] 
     @pharmaceutics = Pharmaceutic.where("barcode LIKE ?", params[:code]) 
    else 
     @pharmaceutics = Pharmaceutic.all 
    end 
    end 

И когда я посылаю два Params: код и запросов Я хотел бы, чтобы фильтровать с помощью Фармацевтика обоих. У меня есть база данных MySQL.

ответ

4

я бы, вероятно, использовать scoped метод, например:

def index 
    scope = Pharmaceutic.scoped # Pharmaceutic.all if you use Rails 4 
    scope = scope.where('name LIKE ?', params[:query]) if params[:query].present? 
    scope = scope.where('barcode LIKE ?', params[:code]) if params[:code].present? 
    @pharmaceutics = scope 
end 

Вы также можете написать свои собственные области и заменить where(...) с ними, чтобы сделать код более понятным.

+0

+1 для использования области действия ActiveRecord. – mcfinnigan

+0

@regedarek в Rails 4 вы можете использовать 'Pharmaceutic.all', в соответствии с этим: http://blog.remarkablelabs.com/2012/12/what-s-new-in-active-record-rails-4- Обратный отсчет к 2013 году –

Смежные вопросы