I have used RESTful techniques to generate a model (in fact, I am using Devise gem, which does that for me), and I have added new fields called first_name and last_name to the model. Migration went fine. I added attr_accessor :first_name, :last_name to the model and expected it would just work. But when I try to mass-assign new instances with Doctor.create({:first_name=>"MyName"}) etc., I am getting errors saying I can't mass-assign protected attributes.

我认为使用attr_访问器的全部目的是绕过模型字段的保护性.你能帮我理解这个信息吗?

编辑:哦,顺便说一下,这些记录也不会被创建.我想应该是的,因为这只是一个警告,但它们不在数据库中.

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

模式没有名字和姓氏,因为它们是在doctor 的祖先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 protected]", :first_name=>"Name", :last_name=>"LastName")
Patient.create(:doctor_id=>1, :gender=>"male", :date_of_birth=>"1991-02-24")

推荐答案

不要把attr_accessorattr_accessible混为一谈.Accessor内置于Ruby中,定义了getter方法model_instance.foo # returns something和setter方法model_instance.foo = 'bar'.

Accessible由Rails定义,并使属性mass可赋值(与attr_protected相反).

如果first_name是模型数据库表中的一个字段,那么Rails已经为该属性定义了getter和setter.你只需要加attr_accessible :first_name.

Ruby-on-rails相关问答推荐

Rails 7:加载所有刺激控制器

控制器规格未知关键字:id

如何从设计中删除/禁用注册

Rails:uniq vs. distinct

Ruby 中 as_json 和 to_json 方法的区别

heroku 推送错误:“无法检测到 rake 任务”

如何检测导致 Rake 中的弃用警告的原因

如何更改 Heroku 应用程序的 DATABASE_URL

在 El Capitan 上安装 Nokogiri (1.6.7) 时出错

未捕获的 ReferenceError:未定义 ReactDOM

ActiveRecord OR 查询哈希表示法

xxx 的副本已从模块树中删除,但仍处于活动状态

参数错误:范围主体需要可调用

Rails validates_presense 不验证布尔值?

如何解决错误“‘生产’环境缺少‘secret_key_base’”(Rails 4.1)

当我运行Bundle 安装时,Nokogiri '无法构建 gem 本机扩展'

设置“EDITOR”或“BUNDLER_EDITOR”环境变量

带有自定义列名的 Rails belongs_to

Rspec 3 如何测试闪存消息

Rails 4按方法查找或创建不起作用