Ransack 搜索未返回 Rails 中枚举字段的预期结果

问题描述 投票:0回答:1

当我尝试根据枚举字段过滤结果时,我在 Rails 应用程序中遇到了 Ransack 搜索问题。尽管实现了看似正确的设置,但当我选择任何交易类型时,搜索不会返回预期结果。这是与搜索功能相关的视图和控制器代码的简化版本:

#型号代码:

enum transaction_type: %i[LedgerBook StaffLedgerBook Transfer ExpenseEntry Order PurchaseSaleDetail Salary SalaryDetail Investment Expense]  

#查看代码:

<%= search_form_for @q, url: payments_path, class: "admin-controls" , method: "get" do |f| %>
  <div class="card col-lg-12 shadow mb-3 p-3">
    <div class="row mt-3">
      <div class="col-lg-3 form-group float-left">
        <%=f.select:account_id_in,options_from_collection_for_select(@accounts, "id" , ->(st){"#{st.title} \u{27F6}
          #{st.bank_name}"},f.object.account_id_in), {:include_blank => "Select the Account Title"},{:multiple =>
          true,:class=>"form-control chosen-select", :data => {:placeholder => "Select the Account Title"} } %>
      </div>
      <div class="col-lg-2 form-group float-left">
        <%= f.search_field :id_eq, class: 'form-control input-sm ' , placeholder: "Enter Id" %>
      </div>
      <div class="col-lg-2 form-group float-left">
        <%= f.select :transaction_type_eq, options_for_select(Payment.transaction_types.map { |key, value|
          [key.humanize, value] }, @transaction_type),{:include_blank=> "Select Type"}, { class: "form-control
          chosen-select", prompt: 'Select Type' }%>
      </div>
      <div class="ml-1">
        <p>From:</p>
      </div>
      <div class="col-lg-2 form-group float-left">
        <%= f.search_field :created_at_gteq,value: @start_date, class: 'form-control input-sm datepicker'
          , 'datepicker'=> true,placeholder: "YYYY-MM-DD" %>
      </div>
      <div class="ml-1">
        <p>To:</p>
      </div>
      <div class="col-lg-2 form-group float-left">
        <%= f.search_field :created_at_lteq,value: @end_date, class: 'form-control input-sm datepicker' , 'datepicker'=>
          true ,placeholder: "YYYY-MM-DD"%>
      </div>
      <div class="col-1 form-group float-left"> <button class="btn btn-primary" name="search_submit" type="submit"
          value="Search" style="width:100px;"><i class="fa fa-search"></i></button> </div>
    </div>
  </div>

# 控制器代码:

if params[:q].present?   @title = params[:q][:account_title_cont]   @start_date = params[:q][:created_at_gteq]   @end_date = params[:q][:created_at_lteq]   @transaction_type = params[:q][:transaction_type_eq]   params[:q][:created_at_lteq] = params[:q][:created_at_lteq].to_date.end_of_day if params[:q][:created_at_lteq].present?   @q = Payment.where(max_credit: nil, max_debit: nil).ransack(params[:q]) else   @q = Payment.where(created_at: @start_date.to_date.beginning_of_day..@end_date.to_date.end_of_day, max_credit: nil, max_debit: nil).ransack(params[:q])

 end

在此代码中,我尝试根据枚举字段 transaction_type 过滤付款。但是,搜索结果与所选交易类型不匹配。我已确认

@transaction_type
变量已正确分配,并且 Ransack 参数名称似乎与我的模型中的属性一致。
options_for_select in
视图看起来也正确。有人可以指导我了解可能导致此问题的原因以及如何使用 Rails 中的枚举字段正确实现 Ransack 搜索吗?

ruby-on-rails ruby debugging ransack
1个回答
0
投票

你可以做这样的事情。

ransacker :transaction_type, formatter: proc { |v| transaction_types[v] } do |parent|
    parent.table[:transaction_type]
  end
© www.soinside.com 2019 - 2024. All rights reserved.