Ich hätte gerne eine Liste aller Attributnamen, die massenweise zugewiesen werden können. Ich benötige dies für einen benutzerdefinierten Formular-Generator, der standardmäßig keine Eingabefelder hinzufügt, denen keine Massenzuweisung zugewiesen werden kann.
Zum Beispiel, wenn ich folgendes Modell habe:
class Post < ActiveRecord::Base
attr_protected :account
belongs_to :author
validates_presence_of :title, :author
end
Ich hätte gerne als Ergebnis [:author, :title]
.
ruby-on-rails
activerecord
Vincent
quelle
quelle
SHOULDN'T
statt zugänglich sindARE NOT
? Wenn Sie eine Eingabe mit name = "post [created_at]" und value = "01/01/2012" übergeben, geht sie nicht an das Modell? hier tut es. Hängt von Ihrer Rails-Version ab (Rails Core ändert die Standardeinstellungen nach dem Skandal um Github / zugängliche Attribute).Einige der zuvor genannten Antworten gelten möglicherweise nicht für Rails 4.
Sie können verwenden
MyModel.attribute_names
, um das Array der Tabellenattribute abzurufen. Dies führt jedoch möglicherweise nicht zu massenzuweisbaren Attributen, da sich dieser Aspekt von Rails mit Version 4 ändert. Http://weblog.rubyonrails.org/2012/3/21/strong-parameters /.quelle
Benutz einfach
Post.accessible_attributes
Dadurch werden alle Attribute zurückgegeben, auf die die Klasse zugreifen kann
quelle
Post.accessible_attributes(:user)
,Post.accessible_attributes(:admin)
etc. Ich habe auch gefundenPost.active_authorizers
hilfreich, es gibt einen Hash aller definierten Rollen und deren Attribute zugänglich.User
Modell, das von einer Datenbanktabelle unterstützt wird. DennUser.accessible_attributes
ich bekommeNoMethodError: undefined method "accessible_attributes" for #<Class:0x007f9216346fe8>
Für Modelle können Sie
MyModel.attribute_names
oder verwendenMyModel.column_names
.Für Instanzen können Sie verwenden
MyModel.new.attribute_names
.quelle
Post.accessible_attributes.to_a.map(&:to_sym)
quelle