Użyłem technik RESTful do wygenerowania modelu (w rzeczywistości używam Devise gem, co robi to dla mnie), i dodałem nowe pola o nazwie first_name i last_name do modelu. Migracja poszła dobrze. Dodałem attr_accessor: first_name,: last_name do modelu i oczekiwałem, że po prostu zadziała. Ale kiedy próbuję masowo przypisać nowe wystąpienia za pomocą Doctor.create ({: first_name => "MyName"}) itp., Dostaję błędy mówiąc, że nie mogę masowo przypisywać chronionych atrybutów."OSTRZEŻENIE: Nie można masowo przypisywać chronionych atrybutów"
Uważam, że cały sens korzystania z attr_accessor było obejście ochrony pól modelu. Czy możesz mi pomóc zrozumieć tę wiadomość?
Edycja: oh, a przy okazji także rekordy nie są tworzone. Myślałem, że powinny być, ponieważ to tylko ostrzeżenie, ale nie ma ich w bazie danych.
Edit2: tu jest mój model
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
i schemat, który nie ma first_name i last_name ponieważ są one tworzone w tabeli użytkowników, który jest przodkiem lekarzy. Użyłem dziedziczenia pojedynczego stołu.
create_table :doctors do |t|
t.integer :invitations
t.timestamps
end
i to jest migracja do zmiany tabeli użytkowników
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :type, :string
EDIT: tutaj jest plik nasion. Nie włączam metody truncate_db_table, ale działa.
%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")
Nie jestem bardzo doświadczony w Railsach 4, ale myślę, że to pytanie jest zadaniem Rails 3. Domyślna konfiguracja na twardym dysku w 'config/application.rb' w Rails 4 jest pusta! –
http://apidock.com/rails/ActiveRecord/Base/attr_accessible/class – shilovk