Ransack:忽略布尔属性,而是返回所有记录

时间:2016-05-07 10:29:30

标签: ruby-on-rails-4 ransack

我正在使用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查询不是,条件被忽略,而且返回表中的所有记录。 可能是什么原因?

1 个答案:

答案 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