即使被允许,也无法保存5.2阵列(不允许的参数)

问题描述 投票:0回答:1

我在blog/_form.html.erb上有一系列复选框,这些复选框使用Javascript / JQuery为hidden_field_tag更新了:subcategory_ids

隐藏字段看起来像这样:

<%= f.hidden_field :subcategory_ids %>

并且根据Google代码检查器的值,该值正在更新:

<input type="hidden" value="1,5,6" name="blog[subcategory_ids]" id="blog_subcategory_ids">

我的blog中具有以下schema.rb结构:

 create_table "blogs", force: :cascade do |t|
    t.string "title"
    t.string "teaser"
    t.text "body"
    t.boolean "motivation", default: false
    t.boolean "mindset", default: false
    t.boolean "resourcing", default: false
    t.boolean "planning", default: false
    t.boolean "time_management", default: false
    t.boolean "discipline", default: false
    t.string "image_url"
    t.text "pinterest_description"
    t.boolean "published", default: false
    t.datetime "published_at"
    t.boolean "approved", default: false
    t.boolean "featured", default: false
    t.bigint "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "primary_category"
    t.bigint "resource_id"
    t.string "subcategory_ids", array: true
    t.index ["resource_id"], name: "index_blogs_on_resource_id"
    t.index ["user_id"], name: "index_blogs_on_user_id"
  end

以及我的blogs_controller.rb中的以下参数:

def blog_params
  params.require(:blog).permit(
    :title,
    :teaser,
    :body,

    :primary_category,
    :motivation,
    :mindset,
    :resourcing,
    :planning,
    :time_management,
    :discipline,

    :image_url,
    :pinterest_description,

    :published,
    :published_at,
    :featured,
    :approved,

    :resource_id,
    :user_id,

    :pins => [],
    :subcategory_ids => []
  )
end

但是,由于服务器中的subcategory_ids错误,我的unpermitted parameter: :subcategory_ids似乎没有保存:

Started PATCH "/blogs/1" for ::1 at 2019-11-08 21:33:43 -0800
Processing by BlogsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"VDXdyzAYmVngd5at8QE4JIe09PeEuMi6+p99AFX8nv2iO3qIXGUEDId1jnGyRXR3h8vXLVjG/EUuGtHFxAt03A==", "blog"=>{"title"=>"Test Blog the First", "teaser"=>"Teaser Goes Here.  Yes, all the things. Yes indeed-e-o.  Words are being typed.  By me.", "image_url"=>"https://sixkeyskills.s3-us-west-1.amazonaws.com/woman-arms-up-ocean.jpg", "body"=>"<p data-bind=\"text: generatedIpsum\">Blog text</p>", "primary_category"=>"General", "motivation"=>"1", "mindset"=>"1", "resourcing"=>"0", "planning"=>"0", "time_management"=>"0", "discipline"=>"0", "subcategory_ids"=>"1,5,6", "pinterest_description"=>"", "published_at"=>"2019-11-07 00:00:00 UTC", "published"=>"1", "approved"=>"1", "featured"=>"0", "resource_id"=>""}, "commit"=>"Save", "id"=>"1"}
  Blog Load (0.3ms)  SELECT  "blogs".* FROM "blogs" WHERE "blogs"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/blogs_controller.rb:112
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/blogs_controller.rb:103
   (41.0ms)  SELECT "subcategories"."id" FROM "subcategories" INNER JOIN "blog_categorizations" ON "subcategories"."id" = "blog_categorizations"."subcategory_id" WHERE "blog_categorizations"."blog_id" = $1  [["blog_id", 1]]
  ↳ app/controllers/blogs_controller.rb:73
Unpermitted parameter: :subcategory_ids
   (0.1ms)  BEGIN
  ↳ app/controllers/blogs_controller.rb:82
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/blogs_controller.rb:82
   (0.2ms)  COMMIT
  ↳ app/controllers/blogs_controller.rb:82

这很奇怪,因为它表明已编辑的博客确实具有subcategory_ids,但随后又说这是一个不允许的参数。

我已重新启动服务器,但无济于事。谁能看到这个错误发生的原因或为什么没有保存?

ruby-on-rails
1个回答
0
投票

因为在控制器中,您等待一个数组,但数组没有。您在表单中的输入应如下所示:

blog[subcategory_ids] []

或尝试写入字段multiple: true或更改控制器

:subcategory_ids => []

to

:subcategory_ids

更多变形:

<%= form.hidden_field :categories, value: 1, multiple: true %>
<%= form.hidden_field :categories, value: 2, multiple: true %>
<%= form.hidden_field :categories, value: 3, multiple: true %>

和控制器:

:subcategory_ids => []
© www.soinside.com 2019 - 2024. All rights reserved.