40 votes

Erreur Rails: impossible d'attribuer en masse des attributs protégés

Je suis en train de construire un extrêmement simple Carnet d'adresses application rails. Cependant, j'obtiens cette erreur: "impossible de masse-assigner des attributs protégés: city_id". Comment puis-je résoudre ce problème? N'hésitez pas à ajouter un commentaire/suggestion pour votre réponse concernant les rails de code ci-dessous. Merci.

Comment j'ai créé le projet (à partir de zéro):

rails new demo
rails generate model City name:string
rails generate scaffold User name:string city:references
rake db:migrate

db/graines.db:

City.create(name: "City1")
City.create(name: "City2")
City.create(name: "City3")

rake db:de la graine

changé cette ligne, <%= f.text_field :city %> de app/views/users/_form.html.erb de <%= f.collection_select :city_id, City.all, :id, :name %>

changé user.rb auto-généré en ligne, belongs_to :city de has_one :city.

ajouté belongs_to :city de city.rb

P. S: je suis à l'aide de Rails 3.2.3 et Ruby 1.9.3.

69voto

frank blizzard Points 3973

Il était très important de la sécurité changer de rails 3.2.3 qui vous oblige à permettre la mesure de masse explicitement par paramètre config.active_record.whitelist_attributes de 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

sinon (et mieux), au lieu de permettre de masse assingment, il vous suffit de régler l' attr_accessible pour les attributs de votre modèle que vous voulez être en mesure de changer, par exemple,

attr_accessible :city_id, :name # list all fields that you want to be accessible here

Veuillez vérifier les rails de guide de sécurité pour plus d'informations sur la masse d'affectation dans les rails.

3voto

agstwn21 Points 45

ou tu peux changer

 config.active_record.mass_assignment_sanitizer = :strict => :logger
 

Je ne sais pas pourquoi je devais changer pour :logger mais je m'aide avec l'erreur

2voto

user3706826 Points 11

Il suffit d'inclure le champ de données dans le modèle en tant que

attr_accessible: city_id

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X