Рубин на рельсах, поиск логики и рефакторинг - PullRequest
0 голосов
/ 07 мая 2010

Я не слишком знаком с плагином searchlogic для рельсов (я просматривал Railscasts, но не помог в отношении конкретного кода ниже). Кто-нибудь может кратко описать, как это используется в трех методах ниже? Спасибо за любой ответ.

 def extract_order
@order_by = if params[:order].present?
  field = params[:order].gsub(".", "_")
  field = field.starts_with?('-') ? 'descend_by_'+field[1..-1] : 'ascend_by_'+field
  field.to_sym
else
  # Workaround
  'searchlogic'.to_sym
end
end

def find_resources
@search_conditions = params[:search_conditions] || {} # See http://www.binarylogic.com/2008/11/30/searchlogic-1-5-7-complex-searching-no-longer-a-problem/
@resources = @resource_model.send(@order_by).searchlogic(:conditions => @search_conditions) 
end

def apply_filters
f = filter_by
f.each do |filter_field|
  filter_constraints = params[filter_field.to_sym]
  if filter_constraints.present?
    # Apply searchlogic's scope
    @resources.send(filter_field,filter_constraints)
  end
end
end

1 Ответ

0 голосов
/ 07 мая 2010

метод apply_filter не вызывается.

Метод find_resources использует содержимое из @order_by (несмотря на то, что метод извлечения порядка не вызывается)

Таким образом, поиск в модели ресурсов выполняется с использованием параметров (возможно, введенных пользователем), хранящихся в условии поиска переменной, и с помощью @order_by, чтобы указать порядок, который он должен использовать.

Обратите внимание, что ваше приложение получает какой-то параметр и меняет "." в "_" и получение подстроки (1 ..- 1, фактически удаляя первый символ и используя ее в качестве параметра для поиска по области (ascend_by_ | downnd_by _).
это функция от searchlogic, и вы можете использовать ее как динамический искатель: ascend_by_name_of_field.

IMO, это выглядит грязно. Вы предполагаете, что @order_by не пуст и что функция extract_order уже запущен. Другое дело, что действия, которые не взаимодействуют с пользователем, не должны быть доступны.

...