【发布时间】: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