attr_accessible umgehen
Kennen Sie das auch? Beim Testen oder in den Controllern der Administration der neuen Anwendung sollen per Massenzuweisung die Attribute eines Models gesetzt werden, aber im Model sind mal wieder einige Attribute wegen attr_accessible nicht massenzuweisbar…
Das ist selbstverständlich grundsätzlich der richtige Weg. Hier zeigen wir Ihnen nun aber eine Möglichkeit, bei einzelnen Massenzuweisungen die Restriktionen von attr_accessible zu umgehen:
Man öffne ActiveRecord::Base und definiere ein paar neue Methoden:
class ActiveRecord::Base # def unsafe_update_attributes(attrs) self.unsafe_attributes = attrs save end # def unsafe_update_attributes!(attrs) self.unsafe_attributes = attrs save! end # def self.unsafe_create(attrs) o = new o.unsafe_attributes = attrs o.create end # def self.unsafe_create!(attrs) o = new o.unsafe_attributes = attrs o.create! end # def unsafe_attributes=(attrs) return if attrs.nil? attrs.each do |(k,v)| send("#{k}=", v) end end end
Das ganze kann beispielsweise in eine Datei im /lib/ Verzeichnis. Das require in der environment.rb (oder einem Initializer) nicht vergessen. Die Verwendung sollte selbsterklärend sein…
Hierzu gibt es auch einen eleganten “Rails”-Weg: http://flip.netzbeben.de/2009/06/secure-model-mass-assignment-for-administration-panels/
Grüße,
flip
Dein Ansatz gefällt auch mir besser.
Zumal man ihn auch dafür verwenden kann, im öffentlichen Bereich einen default_scope einzusetzen, der im Admin-Panel nicht gelten soll.