Ein paar Dinge:
Massenzuordnung bedeutet in der Regel Attribute in den Anruf vorbei, die ein Objekt als Teil eines Attribute erstellt Hash. Das heißt, Sie übergeben eine Reihe von Attributen in einem Hash in den Aufruf, der das neue Objekt erstellt. Zum Beispiel:
@user = User.create({:name => "My name", :user_type => "nice_user"})
jedoch Rails enthält einige grundlegende Regeln, die Sicherheit nicht alle Attribute bedeuten kann standardmäßig auf diese Weise zugewiesen werden. Sie müssen angeben, welche im Voraus können. Sie tun so wie folgt aus:
class User < ActiveRecord::Base
attr_accessible :name, :user_type
end
Wenn Sie ein Attribut nicht spezifiziere ist attr_accessible
, und Sie geben es in das Objekt zu erstellen, erhalten Sie den Fehler Sie auf dem Laufenden.
Hier sind weitere Details:
http://api.rubyonrails.org/v3.2.9/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html
Die Alternative einige der Attribute zu setzen ist, wenn Sie zuerst den Datensatz erstellen, und setzen Sie andere nach - etwa so:
# In this example `user_type` is not attr_accessible so it needs to be set specifically
@user = User.create({:name => "My name"})
@user.user_type = "nice_user"
@user.save
Wenn Sie Probleme bei der Verwendung des Spaltennamens type
haben, weil rails verwirrt ist und denkt, dass Sie Single Table Inheritance (STI) verwenden möchten, überprüfen Sie die Antwort auf diese Frage, um zu sehen, wie Sie damit umgehen können: http://guides.rubyonrails.org/
Die Spalte „Typ“ standardmäßig von Schienen für STI verwendet wird. Die beste Lösung besteht darin, die Typspalte in etwas anderes umzubenennen. Eine nicht empfohlene Problemumgehung besteht darin, Ihre Modelldatei hinzuzufügen. Self.inheritance_column =: some_other_column_that_might_not_exists – bcd
Ja - Informationen dazu, wie Sie das STI-Problem umgehen können, indem Sie die Spalte "type" verwenden: http://stackoverflow.com/questions/7134559/rails-use-type-column-ohne-sti (obwohl eine bessere Option sein könnte, den Namen der Spalte zu ändern). –
yeah - Ich bin auf dieses Problem gestoßen. Geänderter Spaltenname Danke! – Karan