【问题标题】:Can't Mass Assign Protected Attributes Error无法批量分配受保护的属性错误
【发布时间】:2013-02-28 21:54:33
【问题描述】:

我正在尝试创建一个 teacher 表,其中有一个名为“teacher_type_id”的列,即它是一个外键,连接到具有三行的 teacherType 表,即 1 => Tutor, 2 => 模块负责人和 3 => 讲师。

我的schema.rb 文件中包含以下信息:

create_table "teacher_types", :force => true do |t|
 t.string   "title"
 t.datetime "created_at", :null => false
 t.datetime "updated_at", :null => false
end

create_table "teachers", :force => true do |t|
 t.integer  "teacherType_id"
 t.string   "firstName"
 t.string   "lastName"
 t.datetime "created_at",     :null => false
 t.datetime "updated_at",     :null => false
end

add_index "teachers", ["teacherType_id"], :name => "index_teachers_on_teacherType_id"

teacher_typ.rb 文件如下所示:

class TeacherType < ActiveRecord::Base
 has_many :teachers
 attr_accessible :title, :teacher_type_id   (Also tried :teacherType_id)
end

我的teacher.rb 文件如下所示:

class Teacher < ActiveRecord::Base
  has_one :teacherType
  attr_accessible :firstName, :lastName
end

但是,现在当我转到我的 localhost:3000/teacher/new 并尝试使用“1”或“Tutor”作为 TeacherType 创建一个新教师时,但是当我提交表单时,我总是收到相同的错误,即:

ActiveModel::MassAssignmentSecurity::Error in TeachersController#create

Can't mass-assign protected attributes: teacherType_id
Rails.root: /Users/omar/rails_projects/attendance

Application Trace | Framework Trace | Full Trace
app/controllers/teachers_controller.rb:43:in `new'
app/controllers/teachers_controller.rb:43:in `create'

Request

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"NEJf3bISJsidStVyfdRns0oZ7JzSZ8RqqZSAWgL9hz8=",
 "teacher"=>{"teacherType_id"=>"Tutor",
 "firstName"=>"Jack",
 "lastName"=>"Sparrow"},
 "commit"=>"Create Teacher"}`

任何想法为什么会这样?我查看了attr_accessible,但仍然无济于事

【问题讨论】:

  • 为什么在教师类型中可以访问 attr?
  • 我在各种论坛上阅读时正在玩attr_accessible,并回答了问题,这解决了它。但实际上并没有
  • 但是 attr 是教师,而不是教师类型。
  • 是的,这是否意味着 TeacherType 正在让其他模型可以访问 teacher_type_id 属性...?我认为 Abitike 声明了一个公共变量......或者我的想法完全错了
  • 不,这意味着它声明的模型允许对该属性进行大规模分配——而 apneadiving 的答案应该进一步澄清它。想想看——你不会想从表单中设置一个teacherType的ID,teacherTypes已经一个ID。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2


【解决方案1】:

teacherType_id 在 TeachersController#new 视图中被分配了一个字符串,但它被声明为一个整数。检查你的观点。另外,我会避免使用混合大小写的名称,例如teacherType_id...

【讨论】:

  • 但是teacherType_id 是teacherType 模型的id。为什么teacher_type_id也是一个选项?
【解决方案2】:

在老师:

attr_accessible :firstName, :lastName, :teacherType_id

【讨论】:

  • WTF..... O_o 我一直在玩teacherType 模型和Teacher 模型,然后不知从哪里冒出我没有尝试过的一件事......非常感谢。顺便说一句,:has_many 和 :has_one 是否正确?另外,您能否简要解释一下您的代码为何有效?
  • 此代码有效,因为参考字段属于教师(有关外键解释,请参阅 Rails 文档)。您可能已经看到它查看参数:它嵌套在教师中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
相关资源
最近更新 更多