ruby-on-rails - multiple - rails permit param
Rails 4 Parámetros no permitidos para Array (5)
Los tipos escalares permitidos son String
, Symbol
, NilClass
, Numeric
, TrueClass
, FalseClass
, Date
, Time
, DateTime
, StringIO
, IO
, ActionDispatch::Http::UploadedFile
y Rack::Test::UploadedFile
.
Para declarar que el valor en params debe ser una matriz de valores escalares permitidos, asigne la clave a una matriz vacía:
params.permit(:id => [])
Esto es lo que dice la fuerte documentación de parámetros en Github :
params.require(:post).permit(:name, :email, :categories => [])
Espero que esto funcione para usted.
Tengo un campo de matriz en mi modelo y estoy intentando actualizarlo.
Mi método de parámetro fuerte está debajo
def post_params
params["post"]["categories"] = params["post"]["categories"].split(",")
params.require(:post).permit(:name, :email, :categories)
end
Mi acción en mi controlador es la siguiente
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
Sin embargo, cada vez que envío la actualización de la publicación, en mi registro de desarrollo veo
Unpermitted parameters: categories
Los parámetros pasados son
Parameters: {"utf8"=>"✓", "authenticity_token"=>"auth token", "id"=>"10",
"post"=>{"name"=>"Toni Mitchell", "email"=>"[email protected]", "categories"=>",2"}}
Quiero pensar que tiene algo que ver con el hecho de que las categories
atributos son una matriz, ya que todo lo demás se ve bien. Por otra parte, podría estar equivocado. Entonces, ¿qué pasa con mi código y por qué no me permite guardar el campo de categorías cuando está claramente permitido hacerlo? Gracias.
Prueba esto
params.require(:post).permit(:name, :email, :categories => [])
(Ignore mi comentario, no creo que eso importe)
Tuve el mismo problema, pero en mi caso también tuve que cambiar de:
<input type="checkbox" name="photographer[attending]" value="Baku">
a:
<input type="checkbox" name="photographer[attending][]" value="Baku">
Espero que esto ayude a alguien.
Tuve el mismo problema, pero simplemente agregar array para permitir no fue suficiente. Tuve que agregar el tipo, también. De esta manera:
params.require(:transaction).permit(:name, :tag_ids => [:id])
No estoy seguro de si esta es la solución perfecta, pero después de eso, el registro de ''Parámetros no permitidos'' desapareció.
Encontré una pista para encontrar esa solución en esta excelente publicación: http://patshaughnessy.net/2014/6/16/a-rule-of-thumb-for-strong-parameters
en rieles 4, eso sería,
params.require(:post).permit(:name, :email, {:categories => []})