Rails 5.2 Array Not Saving (недопустимый параметр), даже если он разрешен - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть ряд флажков на моем 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, но потом говорит, что это недопустимый параметр.

Я перезапустил свой сервер, но безрезультатно. Кто-нибудь может понять, почему происходит эта ошибка или почему она не сохраняется?

1 Ответ

0 голосов
/ 09 ноября 2019

потому что в контроллере вы ждете массив, а не массив приходит. Ваш ввод в форме должен выглядеть примерно так:

blog[subcategory_ids] []

или попробуйте написать поле multiple: true или изменить в контроллере

:subcategory_ids => []

на

: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 => []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...