嵌套表单父对象:得到Rack :: Utils :: KeySpaceConstrainedParams

时间:2013-06-13 15:56:23

标签: ruby-on-rails ruby internal-server-error fields-for

我正在建立一个横幅系统,我可以将横幅上传到CampaignBanner(包含说明,网址和位置)。

在视图中我构建了这样的表单:

.page-header
  %h1= t(:'.market_place.title')
.row-fluid
  = form_tag update_dashboard_banners_admin_dashboard_index_path, :method => :put do
    %fieldset
      - @dashboard_banners.each do |dashboard_banner|
        .span3
          = simple_fields_for "dashboard_banners[]", dashboard_banner do |db|
            = db.input :description
            = db.input :target
            = db.input :target_url
            - dashboard_banner.build_banner if dashboard_banner.banner.nil?
            = db.fields_for :banner do |f|
              = f.input :data, :as => :file

    %p= submit_tag t(:'buttons.update'), :class => 'btn btn-primary'

但是当我提交表格时,我得到了

  用于param dashboard_banners的预期数组(获得Rack :: Utils :: KeySpaceConstrainedParams)

例如,在我的第一个fields_for中,我获得了target_url的名称:

  

dashboard_banners [21] [target_url]

我有我的身份证,但在我的横幅的第二个字段中:

  

dashboard_banners [] [banner_attributes] [数据]

在这里你可以看到我没有21号了。

这链接到我得到的内部服务器吗?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的错误,然后我将checkbox数组的名称重命名为除模型名称之外的其他名称。它奏效了。

例如,您将@dashboard_banners作为模型,然后调用复选框dashboard_banners []。我认为这会导致错误。将其命名为d_banner [],然后在控制器中将其作为params [:d_banner]获取。然后你可以在控制器中循环它或做你喜欢的任何事情。