我正在使用ransack来让用户进行动态搜索:
控制器:
@q = Visit.search(params[:q]);
@visits = @q.result(distinct: true)
@q.build_condition
型号:
def self.ransackable_attributes auth_object = nil
(column_names - UNRANSACKABLE_ATTRIBUTES) + (_ransackers.keys)
end
查看:
<%= search_form_for @q, url: doctor_visits_path do |f| %>
<%= f.condition_fields do |c| %>
<%= render "condition_fields", f: c%>
<% end %>
<p><%= link_to_add_fields "Add condition", f, :condition %>
<div class="actions"><%= f.submit "Search", {:class => "btn"} %></div>
<% end %>
部分:
<div class="field">
<%= f.attribute_fields do |a| %>
<%= a.attribute_select({ associations:
[:specialists, :treatment_factors]
},{:class => "form-control"}) %>
<% end %>
<%= f.predicate_select({},{:class => "form-control"}) %>
<%= f.value_fields do |v| %>
<%= v.text_field :value,{:class => "form-control"} %>
<% end %>
<%= link_to "Remove", '#', class: "remove_fields" %>
</div>
我在Visits表中有几个布尔属性。当我在第一个字段中选择布尔属性时,在第二个(谓词字段)中选择 true 或 false 并保留第三个值< / em>字段为空,params生成正确,但sql查询不是,条件被忽略,而且返回表中的所有记录。 可能是什么原因?
答案 0 :(得分:0)
添加您的模型:
简单版,使用PostgreSQL:
ransacker :predicate do
Arel.sql("to_char(\"#{table_name}\".\"predicate\", '99999')")
end
同样,使用MySQL:
ransacker :predicate do
Arel.sql("CONVERT(#{table_name}.id, CHAR(4))")
end