【发布时间】:2021-09-28 00:45:42
【问题描述】:
用户在索引页面中应用过滤器,我需要过滤器的params 来做一些后台工作。
在应用过滤器后,我可以像往常一样访问参数,但是当我尝试将 request.params 转发到启动后台作业的控制器操作时,表单中传递的参数 hidden_field 不再是一个ActionController::Parameters 对象,而是一个String,我无法像通常通过它的键那样访问它。
表格:
<%= form_tag admin_users_on_demand_mass_emails_path, method: :get do %>
<%= simple_fields_for :on_demand_email do |f| %>
<%= hidden_field_tag :filters, params[:q].to_unsafe_h %>
<%= f.input :email,
as: :radio_buttons,
collection: options_for_on_demand_emails %>
<% end %>
<%= submit_tag "Enviar emails", class: "btn btn-primary" %>
<% end %>
表单发送前的参数:
<ActionController::Parameters {"q"=><ActionController::Parameters {"fname_or_lname_or_email_or_tax_id_number_or_legal_name_cont"=>"", "extra_params"=><ActionController::Parameters {"invoice_status"=>""} permitted: false>, "subscription_payment_type_eq"=>"", "address_province_eq"=>"", "subscription_status_eq"=>"cancelled", "created_at_gteq"=>"", "created_at_lteq"=>""} permitted: false>, "subscription_status_eq"=>"{}", "commit"=>"Filter", "controller"=>"admin/users", "action"=>"index"} permitted: false>
变成:
{"filters"=>
"{\"fname_or_lname_or_email_or_tax_id_number_or_legal_name_cont\"=>\"\", \"extra_params\"=>{\"invoice_status\"=>\"\"}, \"subscription_payment_type_eq\"=>\"\", \"address_province_eq\"=>\"\", \"subscription_status_eq\"=>\"cancelled\", \"created_at_gteq\"=>\"\", \"created_at_lteq\"=>\"\"}",
"on_demand_email"=>"[FILTERED]",
"commit"=>"Send emails"}
我尝试了许多不同的方法,例如传递request.params.to_unsafe_h(相同的结果)和params.require(:q).permit(params[:q].keys),当:q 由于require 而不存在时,这会导致视图中出现错误。
有没有什么方法可以完成此操作或在将参数哈希作为字符串传递后重建它?
【问题讨论】:
标签: html ruby-on-rails parameters simple-form