0

我对 rails 的 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
4

1 回答 1

0

方法 apply_filter 没有被调用。

方法 find_resources 正在使用来自 @order_by 的内容(尽管未调用方法提取顺序)

因此,资源模型中的搜索是使用存储在变量搜索条件中的参数(可能是用户输入)并使用@order_by 来说明它必须使用的顺序来完成的。

请注意,您的应用程序正在获取一些参数并更改“。” 到“_”并获取子字符串(1..-1,实际上删除第一个字符,并将其用作范围搜索的参数(ascend_by_|descend_by_)。
它是searchlogic的一个功能,您可以将其用作动态查找器:ascend_by_name_of_field。

IMO,它看起来很乱。您假设 @order_by 不为空并且函数 extract_order 已经运行。另一件事,没有用户交互的操作不应该是可访问的。

于 2010-05-06T20:51:01.163 回答