为动态密钥配置强参数

我正在尝试提供一个表单,允许管理员编辑特定模型Submission所有值,几乎就像电子表格一样。 Submission由一个字符串字段组成:domain

问题是我无法弄清楚如何在这种背景下处理强大的障碍。 我已经找到了类似处理动态键的类似示例,但我无法弄清楚如何将它们应用到我的参数结构中。 我想我对tap工作方式还不够清楚。

这是我的参数示例:

 {"3"=>{"domain"=>"domain3"}, "2"=>{"domain"=>"domain2"}, "1"=>{"domain"=>"domain1"} 

如果它有帮助,这是我正在使用的forms:

  
Domain

如果你很好奇,这是我的控制器的update_multiple方法。 如果这看起来很熟悉,我从一个railscast得到了轮廓,这在rails3中非常有效,之后强大的params(无论如何?)无处不在。

  def update_multiple logger.debug "update_multiple #{submission_params}" @submissions = Submission.update(submission_params[:submissions].keys, params[:submissions].values) flash[:notice] = "Updated Submissions" redirect_to review_submissions_path end 

如果我使用params.permit!完全绕过强大的婴儿车,这非常有效params.permit! 但是,当然,这是一个不可接受的解决方案。

谢谢你的帮助!

您可以使用“虚拟”模型(没有表格的模型):

 class SubmissionFormCollection include ActiveModel::Model attr_accessor :submissions end 

 def edit_multiple @collection = SubmissionFormCollection.new( Submission.all ) end 

 <% simple_form_for(@collection, as: :some_param_key, path: update_multiple_submissions_path, method: :put) do |f| %> <%= f.fields_for(:submissions) do |s| %> <%= s.input :domain %> <% end %> <% end %> 

 params.require(:some_param_key) .permit(submissions: [:domain]) 

虽然我可能会使用ajax并将其作为编辑每个项目的一系列primefacesPATCH请求来执行,因为它将提供直接的用户反馈和更好的API。