用户在索引页面中应用过滤器,我需要过滤器的 params
来完成一些后台工作。
我可以像往常一样在应用过滤器后访问参数,但是当我尝试将 request.params
转发到启动后台作业的控制器操作时,参数在表单的 {{1 }} 不再是一个 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)
由于 {{ 1}}。
有什么方法可以完成这个操作或在作为字符串传递后重建 params 哈希?