Я использовал методы RESTful для создания модели (на самом деле, я использую Devise gem, что делает это для меня), и я добавил в модель новые поля с именем first_name и last_name. Миграция прошла нормально. Я добавил attr_accessor: first_name,: last_name к модели и ожидал, что он просто сработает. Но когда я пытаюсь назначить новые экземпляры с помощью Doctor.create({: first_name = > "MyName" }) и т.д., Я получаю ошибки, заявляя, что не могу назначать защищенные атрибуты.
Я думал, что цель использования attr_accessor состояла в том, чтобы обойти защищенность полей модели. Можете ли вы помочь мне понять это сообщение?
Изменить: oh, и, кстати, записи также не создаются. Я думал, они должны быть, так как это всего лишь предупреждение, но они не находятся в базе данных.
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
EDIT: вот файл семени. Я не включаю метод truncate_db_table, но он работает.
%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")