Tengo este modelo en Ruby pero arroja un ActiveModel::ForbiddenAttributesError
class User < ActiveRecord::Base
attr_accessor :password
validates :username, :presence => true, :uniqueness => true, :length => {:in => 3..20}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, :uniqueness => true, format: { with: VALID_EMAIL_REGEX }
validates :password, :confirmation => true
validates_length_of :password, :in => 6..20, :on => :create
before_save :encrypt_password
after_save :clear_password
def encrypt_password
if password.present?
self.salt = BCrypt::Engine.generate_salt
self.encrypted_password= BCrypt::Engine.hash_secret(password, salt)
end
end
def clear_password
self.password = nil
end
end
cuando ejecuto esta acción
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = "You Signed up successfully"
flash[:color]= "valid"
else
flash[:notice] = "Form is invalid"
flash[:color]= "invalid"
end
render "new"
end
en ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
.
¿Puede decirme cómo deshacerse de este error o establecer un formulario de registro de usuario adecuado?
protected_attributes
gema para usarattr_accessible
.Respuestas:
Supongo que está utilizando Rails 4. Si es así, los parámetros necesarios se deben marcar como necesarios.
Es posible que desee hacerlo así:
fuente
strong_parameter
gema. Está cubierto en Guías de rieles: guides.rubyonrails.org/… .Para aquellos que usan CanCan . Las personas podrían experimentar esto si usan CanCan con Rails 4+ . Pruebe la solución de solución bastante limpia de AntonTrapps aquí hasta que CanCan se actualice:
En el
ApplicationController
:y en el controlador de recursos (por ejemplo, NoteController):
Actualizar:
Aquí hay un proyecto de continuación para CanCan llamado CanCanCan , que parece prometedor:
CanCanCan
fuente
load_resource
o usarload_resource :except => :create
resolvió el problema. Comprueba la respuesta original aquíHay una manera más fácil de evitar los Parámetros Fuertes, solo necesita convertir los parámetros a un hash regular, como:
Por supuesto, esto anula el propósito de los parámetros fuertes, pero si se encuentra en una situación como la mía (estoy haciendo mi propio manejo de los parámetros permitidos en otra parte de mi sistema), esto hará el trabajo.
fuente
unable to convert unpermitted parameters to hash
Si usa ActiveAdmin, no olvide que también hay una permit_params en el bloque de registro del modelo:
Estos deben configurarse junto con los del controlador:
De lo contrario, obtendrá el error:
fuente
Para aquellos que usan CanCanCan :
Recibirá este error si CanCanCan no puede encontrar el método de parámetros correcto .
Para la
:create
acción, CanCan intentará inicializar una nueva instancia con entrada desinfectada al ver si su controlador responderá a los siguientes métodos (en orden):create_params
<model_name>_params
como article_params (esta es la convención predeterminada en rails para nombrar su método param)resource_params
(un método con nombre genérico que podría especificar en cada controlador)Además,
load_and_authorize_resource
ahora puede tomar unaparam_method
opción para especificar un método personalizado en el controlador que se ejecutará para desinfectar la entrada.Puede asociar la
param_method
opción con un símbolo correspondiente al nombre de un método que se llamará:fuente: https://github.com/CanCanCommunity/cancancan#33-strong-parameters
fuente
Alternativamente, puede usar la gema Atributos protegidos , sin embargo, esto anula el propósito de requerir parámetros fuertes. Sin embargo, si está actualizando una aplicación anterior, los Atributos protegidos proporcionan una vía fácil para actualizar hasta el momento en que pueda refactorizar attr_accessible a params fuertes.
fuente
Si está en Rails 4 y obtiene este error, podría suceder si está utilizando
enum
el modelo si lo ha definido con símbolos como este:El formulario pasará, por ejemplo, un selector de radio como un parámetro de cadena. Eso es lo que sucedió en mi caso. La solución simple es cambiar
enum
a cadenas en lugar de símbolosfuente