2016-05-07 41 views
0

我使用洗劫允许用户做动力搜索:洗劫:布尔属性被忽略,将返回所有的记录,而不是

控制器:

@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> 

我在访问表中有几个布尔属性。当我选择的第一个字段的布尔属性,在第二(谓语场),离开第三字段为空,正确生成的参数,可以,但SQL查询是没有的,条件将被忽略,而表中的所有记录都会返回。 可能是什么原因?

回答

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 
+0

没有帮助。我用'ransacker:bool_test do Arel.sql(“to_char(\”#{table_name} \“。”bool_test \“,'99999')”) end' –

+0

您使用哪个数据库? – Sunny

+0

PostgreSQL //“注释的长度至少为15个字符。” –

相关问题