【问题标题】:How to hold the checkbox params in rails after search搜索后如何在rails中保留复选框参数
【发布时间】:2019-05-14 15:19:07
【问题描述】:

搜索工作正常,但问题是当我根据结果打印 excel 报告时。它显示数据库中的所有值,过滤器不起作用。重新加载整个页面,然后复选框的真实值为走了。刷新页面后如何保持参数

   .row
            .col-md-3
              = check_box_tag "search_customer_supplier[accounts_dealer_types.dealer_code][]","CUS", false
              = label_tag "Organizational Customer"
            .col-md-3
              = check_box_tag "search_customer_supplier[accounts_dealer_types.dealer_code][]", "SUP", false, class: "first_resolution"
              = label_tag "Organzational Supplier"
            .col-md-3
              = check_box_tag "search_customer_supplier[accounts_dealer_types.dealer_code][]", "INDCUS", false, class: "first_resolution"
              = label_tag "Individual Customer"
            .col-md-3
              = check_box_tag "search_customer_supplier[accounts_dealer_types.dealer_code][]", "INDSUP", false, class: "first_resolution"
              = label_tag "Individual Supplier"

这是我的控制器,

    if params[:search].present? or params[:excel_report].present?

      search_customer_supplier = params[:search_customer_supplier]
      if params[:organization_children].present? and search_customer_supplier["id"].present?
        organization_id = search_customer_supplier["id"]
        organization = Organization.find(organization_id)
        anchestor_ids = organization.anchestors.map{|o| o[:member].id }
        search_customer_supplier["id"] = "(#{anchestor_ids.join(' OR ')})" if anchestor_ids.any?
      end
      params[:search_customer_supplier]['accounts_dealer_types.dealer_code'] = params[:search_customer_supplier]['accounts_dealer_types.dealer_code'].join(" OR ") if params[:search_customer_supplier]['accounts_dealer_types.dealer_code'].present?

      @all_address = params[:all_address].to_bool if params[:all_address].present?
      customer_report = params[:search_customer_supplier].map { |k, v| "#{k}:#{v}" if v.present? }.compact
    else
      customer_report = ["accounts_dealer_types.dealer_code:(CUS OR SUP OR INDCUS OR INDSUP)"]
    end

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    您可以在第三个参数上使用检查提交的值:

    check_box_tag 'search_customer_supplier[accounts_dealer_types.dealer_code]', 'CUS', params[:search_customer_supplier]['accounts_dealer_types.dealer_code'] == 'CUS'
    

    【讨论】:

    • 它给了我一个错误 ``` undefined method `[]' for nil:NilClass ```
    • 我可以使用下面的 params.dig 方法来保存参数的值 ``` = label_tag "Account No:" = text_field_tag "search_customer_supplier[account.account_no]", params.dig('search_customer_supplier ', 'account.account_no'), 类: "form-control", 占位符: "Account No" ```
    • 是的,试试#dig。应该没问题。
    • **params.dig('search_customer_supplier', 'accounts_dealer_types.dealer_code') == "CUS" ** 完成了。非常感谢
    • ,但它不再容纳一个复选框值。选择两个或一起时,它不会包含params span>
    【解决方案2】:

    之后,当我分页到第二页时,又引起了另一个问题。

    这是分页到下一页时的输出。 https://i.stack.imgur.com/5MDpq.png

    下面我提到了代码(在控制器中),我认为是分页时调用的查询。

     params[:search_customer_supplier]['accounts_dealer_types.dealer_code'] = params[:search_customer_supplier]['accounts_dealer_types.dealer_code'].join(" OR ") if params[:search_customer_supplier]['accounts_dealer_types.dealer_code'].present?
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多