【问题标题】:Ransack: boolean attributes are ignored, all records are returned insteadRansack:布尔属性被忽略,而是返回所有记录
【发布时间】:2016-06-22 15:38:31
【问题描述】:

我正在使用 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 表中有几个布尔属性。当我在第一个字段中选择布尔属性时,在第二个字段中选择 truefalsepredicate 字段)并保留第三个 value 字段为空,参数生成正确,但 sql 查询不正确,忽略条件,返回表中的所有记录。 可能是什么原因?

【问题讨论】:

    标签: ruby-on-rails-4 ransack


    【解决方案1】:

    添加你的模型:

    简单版,使用 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
    

    【讨论】:

    • 没有帮助。我用ransacker :bool_test do Arel.sql("to_char(\"#{table_name}\".\"bool_test\", '99999')") end
    • 您使用的是哪个数据库?
    • PostgreSQL //"评论的长度必须至少为 15 个字符。"
    • 你能试试这个 0 代表 false 和 1 代表 true = select :q, :bool_test_true, [['TRUE', 1], ['FALSE', 0]], { include_blank: 'All ',选择:params[:q] ?参数[:q][:bool_test_true] : '' }
    • 我应该把这个放在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2018-12-11
    • 1970-01-01
    • 2021-01-13
    • 2017-08-23
    • 2015-05-01
    • 1970-01-01
    相关资源
    最近更新 更多