我使用了RESTful技术来生成模型(实际上,我使用的是Devise gem,它为我完成了此工作),并且向模型添加了名为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的架构,因为它们是在users表中创建的,users表是医生的祖先。我使用了单表继承。
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")
config/application.rb
Rails 4中的默认硬编码配置为空!