3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/autocomplete_controller.rb', line 3
def find
params[:map] = {:value=>[:id], :label=>[:name], :search=>[:name]} unless params[:map]
params[:limit] ||= 50
params[:skip] ||= []
params[:map][:search] ||= []
params[:glue] ||= " "
params[:joins] ||= []
@modelname = params[:model]
@model = params[:model].constantize
params[:map][:label] = parse_table_fields(params[:map][:label])
params[:map][:value] = parse_table_fields(params[:map][:value])
params[:map][:search] = parse_table_fields(params[:map][:search])
params[:joins].each_with_index do |v,k|
params[:joins][k] = eval(":#{v}")
end
value = "CONCAT_WS(' ',#{params[:map][:value].join(",")})"
label = "CONCAT_WS('#{params[:glue]}',#{params[:map][:label].join(",")})"
search = "CONCAT_WS(' ',#{(params[:map][:label]|params[:map][:search]).join(",")})"
skip = ""
toskip = ""
params[:skip].each do |s|
toskip += ","
unless s.to_s.match(/^\d+$/i)
s = "'#{s}'"
end
toskip += s
end
toskip = toskip.gsub(/^,/, "")
if params[:skip].length>0
skip = "AND #{value} NOT IN(#{toskip})"
end
debug params[:joins]
result = @model.find(
:all, {
:select => "#{value} as `value`, #{label} as `label`",
:conditions => ["#{search} LIKE ? #{skip}", "%" + params[:keyword].gsub("%", "\%") + "%"],
:joins => params[:joins],
:order => "label",
:limit => params[:limit]
}
);
render :text => result.to_json
end
|