Un par de cosas:
Asignación de masas por lo general significa que pasa atributos en la llamada que crea un objeto como parte de un atributos el hash. Es decir, pasas un montón de atributos en un hash en la llamada que crea el nuevo objeto. Por ejemplo:
@user = User.create({:name => "My name", :user_type => "nice_user"})
Sin embargo, rieles incluye algunas reglas básicas de seguridad que significan no todos los atributos se pueden asignar ese modo por defecto. Tienes que especificar cuáles pueden de antemano. Lo hace así:
class User < ActiveRecord::Base
attr_accessible :name, :user_type
end
Si no se especifica un atributo es attr_accessible
, y se le pasa a crear el objeto, se obtiene el error informados.
Aquí hay más detalles:
http://api.rubyonrails.org/v3.2.9/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html
La alternativa es fijar algunos de los atributos cuando se crea el registro, y establecer otros después - de este modo:
# In this example `user_type` is not attr_accessible so it needs to be set specifically
@user = User.create({:name => "My name"})
@user.user_type = "nice_user"
@user.save
Además, si tiene problemas con el uso del nombre de columna type
porque los rieles se confunden y cree que desea usar la herencia de tabla única (STI), verifique la respuesta a esta pregunta para ver cómo evitarlo: http://guides.rubyonrails.org/
La columna "tipo" se utiliza por defecto por los carriles para las ITS. La mejor solución es cambiar el nombre de la columna de tipo a otra cosa. Una solución no recomendada es agregar el archivo de modelo self.inheritance_column =: some_other_column_that_might_not_exists – bcd
Sí, consulte esta información para evitar el problema de STI al usar la columna 'tipo': http://stackoverflow.com/questions/7134559/rails-use-type-column-without-sti (aunque una mejor opción puede ser cambiar el nombre de la columna). –
Sí, me encontré con este problema. Cambió el nombre de la columna. ¡gracias! – Karan