strong rails permit multiple ruby-on-rails ruby ruby-on-rails-4 strong-parameters

ruby-on-rails - multiple - rails permit param



parámetros fuertes que no aceptan array (3)

Esto debería funcionar

params.require(:user).permit(:first_name, :role_ids => [])

Tengo esto en mi opinión, que es una casilla de verificación de selección múltiple

Modelo

class User < ActiveRecord::Base has_many :user_roles, :dependent => :destroy accepts_nested_attributes_for :user_roles, :allow_destroy => true has_many :roles, :through => :user_roles end

ver

<%= check_box_tag ''user[role_ids][]'', role.id, user.blank? ? nil : user.roles.include?(role) ,id: dom_id(role)%>

los parámetros fuertes para esto se escriben como

def user params.require(:user).permit(:first_name,{:role_ids => []}) end

Pero en crear dice

Processing by Admin::UsersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"+y8iWya5KIILqS0embEUEZuClycXq0O9Q4pA+MnbM0g=", "user"=>{"first_name"=>"", "last_name"=>"", "email"=>"[email protected]", "language"=>"en", "access_level_id"=>"1", "role_ids"=>["", "1", "", "5", "", "", ""], "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create user"} Unpermitted parameters: role_ids Unpermitted parameters: role_ids Unpermitted parameters: role_ids Unpermitted parameters: role_ids

¿Alguna pista de por qué no acepta la matriz de role_ids que proviene de la forma?


Respondiendo a mí mismo, lo conseguí trabajando no directamente, pero el siguiente método de la discusión de problemas de Strong Parameters me ayudó a convertir un parámetro normal en uno de la lista blanca.

def user_params params.require(:user).permit(:first_name).tap do |whitelisted| whitelisted[:role_ids] = params[:user][:role_ids] end end


Consulte la documentación de Rails Strong Parameters sobre los atributos anidados .

El formato correcto es:

params.permit(:name, {:roles => []}, ...)

La solución de AnkitG funcionó para mí en Rails 4 usando la gema de Role Model para mi modelo de usuario. La implementación de _params de mi controlador de usuario terminó pareciéndose a:

def user_params # Bug with permit for nested arrays... @see https://.com/a/17880288/2631472 params.require(:user).permit(:first_name, :last_name, :middle_name).tap do |whitelisted| whitelisted[:roles] = params[:user][:roles] end end