Подтвердить что ты не робот

Rails 4 Неопределенные параметры для массива

У меня есть поле массива в моей модели, и я пытаюсь его обновить.

Мой метод сильных параметров ниже

def post_params
  params["post"]["categories"] = params["post"]["categories"].split(",")

  params.require(:post).permit(:name, :email, :categories)
end

Мое действие в моем контроллере выглядит следующим образом

def update
  post = Post.find(params[:id]

  if post and post.update_attributes(post_params)
    redirect_to root_url
  else
    redirect_to posts_url
  end
end

Однако, всякий раз, когда я отправляю сообщение об обновлении, в моем журнале разработки я вижу

Unpermitted parameters: categories

Прошедшие параметры:

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"auth token", "id"=>"10", 

"post"=>{"name"=>"Toni Mitchell", "email"=>"[email protected]", "categories"=>",2"}}

Я хочу думать, что это имеет какое-то отношение к тому факту, что атрибут categories является массивом, поскольку все остальное выглядит хорошо. Опять же, я мог ошибаться. Итак, что случилось с моим кодом и почему я не позволяю мне сохранять поле категорий, когда это явно разрешено? Спасибо.

4b9b3361

Ответ 1

Попробуйте это

params.require(:post).permit(:name, :email, :categories => [])

(Не обращайте внимания на мой комментарий, я не думаю, что это важно)

Ответ 2

в рельсах 4, что было бы,

params.require(:post).permit(:name, :email, {:categories => []})

Ответ 3

Разрешенные скалярные типы: String, Symbol, NilClass, Numeric, TrueClass, FalseClass, Date, Time, DateTime, StringIO, IO, ActionDispatch::Http::UploadedFile и Rack::Test::UploadedFile.

Чтобы объявить, что значение в параметрах должно быть массивом разрешенных скалярных значений, сопоставьте ключ с пустым массивом:

params.permit(:id => [])

Вот что документация сильных параметров в Github говорит:

params.require(:post).permit(:name, :email, :categories => [])

Я надеюсь, что это сработает для вас.

Ответ 4

У меня была такая же проблема, но в моем случае мне также пришлось изменить:

<input type="checkbox" name="photographer[attending]" value="Baku">

в

<input type="checkbox" name="photographer[attending][]" value="Baku">

Надеюсь, это поможет кому-то.

Ответ 5

У меня была такая же проблема, но просто добавить массив для разрешения было недостаточно. Мне тоже пришлось добавить тип. Таким образом:

params.require(:transaction).permit(:name, :tag_ids => [:id])

Я не уверен, что это идеальное решение, но после этого журнал журналов "Unpermitted parameters" исчез.

Я нашел подсказку для этого решения из этого превосходного сообщения: http://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters