"WARNUNG: Geschützte Attribute können nicht massenweise zugewiesen werden"

Ich habe RESTful-Techniken verwendet, um ein Modell zu generieren (in der Tat verwende ich Devise Gem, das das für mich erledigt), und dem Modell wurden neue Felder mit den Namen Vorname und Nachname hinzugefügt. Die Migration verlief gut. Ich habe attr_accessor: first_name,: last_name zum Modell hinzugefügt und erwartet, dass es einfach funktioniert. Aber wenn ich versuche, neue Instanzen mit Doctor.create ({: first_name => "MyName"}) usw. massenweise zuzuweisen, erhalte ich die Fehlermeldung, dass ich geschützte Attribute nicht massenweise zuweisen kann.

Ich dachte, der Sinn von attr_accessor besteht darin, den Schutz der Felder eines Modells zu umgehen. Können Sie mir helfen, diese Nachricht zu verstehen?

Edit: oh, und die Datensätze werden übrigens auch nicht erstellt. Ich dachte, sie sollten es sein, da dies nur eine Warnung ist, aber sie sind nicht in der Datenbank.

Edit2: hier ist mein Modell

class Doctor < User
  has_many :patients
  has_many :prescriptions, :through=> :patients

  validates_presence_of :invitations, :on => :create, :message => "can't be blank"

  attr_accessor :invitations
end

und das Schema, das weder den Vor- noch den Nachnamen enthält, da sie in der Benutzertabelle erstellt werden, die der Vorfahr der Ärzte ist. Ich habe die Vererbung einzelner Tabellen verwendet.

create_table :doctors do |t|
  t.integer :invitations

  t.timestamps
end

und dies ist die Migration zum Ändern der Benutzertabelle

add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :type, :string

EDIT: Hier ist die Seed-Datei. Ich beziehe die Methode truncate_db_table nicht ein, aber sie funktioniert.

%w{doctors patients}.each do |m|
  truncate_db_table(m)  
end  

Doctor.create(:invitations=>5, :email=>"[email protected]", :first_name=>"Name", :last_name=>"LastName")
Patient.create(:doctor_id=>1, :gender=>"male", :date_of_birth=>"1991-02-24")

Antworten auf die Frage(10)

Ihre Antwort auf die Frage