Сухая логика поиска в Rails - PullRequest
0 голосов
/ 06 июня 2010

Я использую логика поиска для фильтрации результатов на странице списка компаний.Пользователь может указать любое количество параметров, используя различные именованные URL-адреса.Например:

/ location / Мексика
/ сектор / технология
/ сектор / финансовый / местоположение/ argentina

Результаты приводят к следующему соответственно:

params[:location] == 'mexico'
params[:sector] == 'technology'
params[:sector] == 'financial' and params[:location] == 'argentina'

Я сейчас пытаюсь очистить или «СУШИТЬ» код модели.В настоящее время у меня есть:

def self.search(params)
    ...
    if params[:location]
        results = results.location_permalink_equals params[:location] if results
        results = Company.location_permalink_equals params[:location] unless results
    end
    if params[:sector]
        results = results.location_permalink_equals params[:sector] if results
        results = Company.location_permalink_equals params[:sector] unless results
    end
    ...
end

Я не люблю повторять поиски.Какие-либо предложения?Спасибо.


Ответы [ 2 ]

1 голос
/ 06 июня 2010

Я не думаю, что вы действительно можете сильно СУШИТЬ это, придерживаясь SearchLogic ... Я бы посоветовал уточнить ваши маршруты для прямой выдачи *_permalink в качестве имен параметров и сделать что-то вроде этого:

Company.all :conditions => params.slice(:location_permalink, :sector_permalink)

или

Company.find :all, :conditions => params.slice(:location_permalink, :sector_permalink)

Ссылка на документацию: http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Hash/Slice.html

1 голос
/ 06 июня 2010

Вот как бы я это написал:

[params[:location], params[:sector]].reject(&:nil?).each do |q|
  results = (results ? results : Company).location_permalink_equals q
end

Есть много других способов, просто идея. Имеет преимущество облегчения добавления, скажем, params[:street] или чего-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...