2012-04-01 3 views
3

Ich bin gerade mit Rails 3.2 auf dem Laufenden, und wenn ich create oder update_attributes benutze, scheint ich immer Massenzuordnungsfehler zu bekommen. Ist das normal? Wie sollte ich Datensätze erstellen und aktualisieren?Kann jemand eine strenge Massenzuweisung in Rails 3.2 erklären?

+0

verwenden Sie verschachtelte Ressourcen? – RadBrad

+0

Meinst du, ich bin Attribute zuweisen durch Assoziationen (d. H. Blongs_to), dann ja. Ansonsten bin ich mir nicht sicher, was du meinst, sorry. – Nathan

+0

Michael Hartl hat zu diesem Thema geschrieben: http://news.ycombinator.com/item?id=3781233 – m33lky

Antwort

5

fügen Sie die Attribute, die Sie über massassignment zur weißen Liste im Modell verwandten verschachtelten Modell-Attribute durch die gleiche Form attr_accessible :my_attribute

ermöglicht einstellen festlegen möchten, haben Sie eine accepts_nested_attributes_for für dieses Modell zu setzen und die Attribute hinzufügen auf die Whitelist attr_accessible :$RELATED_MODEL_attributes

lesen Sie diese Links. http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

+0

Ok, ich verstehe. Daher ist die Massenzuweisung standardmäßig eingeschränkt, und das ist normales Verhalten? – Nathan

+0

Nein, wenn Sie 'attr_accessible' oder' attr_protected' nicht festlegen, sind alle Attribute zugänglich und können massassigniert werden. Die Standardeinstellung ist also alles offen ... Wenn Sie eine davon festlegen, erstellen Sie eine weiße/schwarze Liste, dann ... wenn Sie verschachtelte Attribute zuordnen möchten. Sie müssen sie zur Whitelist hinzufügen, sonst erhalten Sie den Massenassignierungsfehler, den Sie sehen. also musst du in diesem Fall 'attr_accessible' setzen ... – mober

+0

Scheint dir der oben erwähnte Michael Hartle-Beitrag etwas widersprechen zu lassen, zumindest in 3.2.3 ist die Massenzuweisung eingeschränkt, es sei denn, du legst mit attr_accessible auf. – Nathan