您可以在表单 hidden_​​field 中将参数作为 ActionController::Parameters 对象转发吗?

用户在索引页面中应用过滤器,我需要过滤器的 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 哈希?

aaassdqw 回答:您可以在表单 hidden_​​field 中将参数作为 ActionController::Parameters 对象转发吗?

您可以使用 JSON.parse() 将它们转换为如下所示的哈希,

{"filters"=>
  JSON.parse("{\"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"}
,

最后我做了 params.permit(q: params.dig(:q)&.keys

本文链接:https://www.f2er.com/65940.html

大家都在问