ruby on rails - software - Error de Rails: no se pueden asignar en masa los atributos protegidos
ruby on rails software (3)
Hubo un importante cambio de seguridad en los carriles 3.2.3 que requiere que se permita explícitamente la asignación masiva configurando config.active_record.whitelist_attributes
en false
http://weblog.rubyonrails.org/2012/3/30/ann-rails-3-2-3-has-been-released/
http://www.h-online.com/security/news/item/Rails-3-2-3-makes-mass-assignment-change-1498547.html
alternativamente (y mejor), en lugar de permitir el control masivo, solo tiene que configurar attr_accessible
para los atributos en su modelo que desea poder cambiar, por ejemplo
attr_accessible :city_id, :name # list all fields that you want to be accessible here
Consulte la guía de seguridad de rieles para obtener más información sobre la asignación de masa en rieles.
Estoy tratando de construir una aplicación de carriles AddressBook extremadamente simple. Sin embargo, recibo este error "No se puede asignar en masa los atributos protegidos: city_id". ¿Cómo puedo arreglar esto? Por favor, siéntase libre de agregar cualquier comentario / sugerencia a su respuesta con respecto al código de rieles a continuación. Gracias.
Cómo creé el proyecto (desde cero):
rails new demo
rails generate model City name:string
rails generate scaffold User name:string city:references
rake db:migrate
db / seeds.db:
City.create(name: "City1")
City.create(name: "City2")
City.create(name: "City3")
rake db: semilla
cambió esta línea <%= f.text_field :city %>
de la app/views/users/_form.html.erb
a <%= f.collection_select :city_id, City.all, :id, :name %>
user.rb
belongs_to :city
línea generada automáticamente belongs_to :city
to has_one :city
.
agregado belongs_to :city
to city.rb
PD: estoy usando Rails 3.2.3 y Ruby 1.9.3.
Simplemente incluya el campo de datos en el modelo como:
attr_accessible :city_id
o puedes cambiar
config.active_record.mass_assignment_sanitizer = :strict
a
config.active_record.mass_assignment_sanitizer = :logger
No sé por qué tuvo que cambiar a :logger
pero esta es la solución para el error.