ActiveRecord: Wie man alle Attribute eines Modells kann mass-assigned?
Ich würde gerne eine Liste aller Attributnamen werden kann Masse zugeordnet. Ich brauche diese für ein benutzerdefiniertes Formular-builder, die nicht fügen Sie Eingabefelder standardmäßig nicht Masse zugeordnet.
Zum Beispiel, wenn ich mit dem folgenden Modell:
class Post < ActiveRecord::Base
attr_protected :account
belongs_to :author
validates_presence_of :title, :author
end
Ich würde gerne als Ergebnis [:author, :title]
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Post.accessible_attributes würde bedecken Sie es, wenn Sie explizit definiert attr_accessible
Abgesehen, dass, etwas wie das zu tun ist klobig, aber funktioniert:
SHOULDN'T
zugänglich sein, anstatt vonARE NOT
? wenn Sie ein input mit name="post[created_at]" und value="01/01/2012" wird es nicht gehen, um das Modell? hier tut es das. Hängt davon ab, Ihre Rails-version(Rails core ändern Sie die Standardeinstellungen nach der Github/zugänglich Attribute-Skandal).Einige der zuvor genannten Antworten gelten möglicherweise nicht für Rails 4.
Können Sie
MyModel.attribute_names
das array der Tabelle, obwohl, das könnte nicht geben Sie die Masse zuweisbaren Parametern, wie dieser Aspekt der Schienen ändert sich mit version 4 http://weblog.rubyonrails.org/2012/3/21/strong-parameters/Verwenden Sie einfach
Zurückgeben, alle Attribute zugänglich der Klasse
Post.accessible_attributes(:user)
,Post.accessible_attributes(:admin)
usw. Ich habe auch festgestelltPost.active_authorizers
hilfsbereit, es gibt einen hash mit allen definierten Rollen und Ihre zugänglichen Parametern.User
Modell unterstützt durch eine Datenbank-Tabelle. FürUser.accessible_attributes
bekomme ichNoMethodError: undefined method "accessible_attributes" for #<Class:0x007f9216346fe8>
Für Modelle, die Sie verwenden können
MyModel.attribute_names
oderMyModel.column_names
.Für Instanzen, die Sie verwenden können
MyModel.new.attribute_names
.Post.accessible_attributes.to_a.map(&:to_sym)