Я использовал методы RESTful для генерации модели (фактически я использую гем Devise, который делает это для меня), и я добавил в модель новые поля с именами first_name и last_name. Миграция прошла нормально. Я добавил attr_accessor: first_name,: last_name в модель и ожидал, что она будет работать. Но когда я пытаюсь массово назначить новые экземпляры с помощью Doctor.create ({: first_name => "MyName"}) и т. Д., Я получаю сообщения об ошибках, в которых я не могу массово назначить защищенные атрибуты.
Я думал, что весь смысл использования attr_accessor заключается в том, чтобы обойти защищенность полей модели. Можете ли вы помочь мне разобраться в этом сообщении?
Редактировать: о, и, кстати, записи тоже не создаются. Я думал, что они должны быть, так как это всего лишь предупреждение, но их нет в базе данных.
Edit2: вот моя модель
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
и схема, которая не имеет имен first_name и last_name, поскольку они созданы в таблице пользователей, которая является предком врачей. Я использовал наследование одной таблицы.
create_table :doctors do |t|
t.integer :invitations
t.timestamps
end
и это миграция для изменения таблицы пользователей
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :type, :string
РЕДАКТИРОВАТЬ: вот начальный файл. Я не включаю метод truncate_db_table, но он работает.
%w{doctors patients}.each do |m|
truncate_db_table(m)
end
Doctor.create(:invitations=>5, :email=>"email@gmail.com", :first_name=>"Name", :last_name=>"LastName")
Patient.create(:doctor_id=>1, :gender=>"male", :date_of_birth=>"1991-02-24")