2013-02-28 2 views
0

Я пытаюсь создать таблицу teacher, в которой есть столбец с именем «teacher_type_id», то есть это внешний ключ, который подключен к таблице teacherType, которая имеет три строки, а именно: 1 = > Репетитор, 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» или «Наставника» как 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, но до сих пор не дало никаких результатов

+0

Почему attr доступен в виде учителя? –

+0

Играли с 'attr_accessible', как я читал на разных форумах, и на вопросы отвечали, что это решило это. Но это на самом деле не – omarArroum

+0

Но атр учитель, а не учитель. –

ответ

1

в Учителя:

attr_accessible :firstName, :lastName, :teacherType_id 
+0

WTF ..... O_o Я играл с моделью teacherType и моделью Учителя, а затем из ниоткуда одна вещь, которую я не пробовал, работает ... Большое спасибо. Кстати, есть: has_many и: has_one правильно? Также вы могли бы просто дать краткое объяснение, почему ваш код работает? – omarArroum

+0

Этот код работает, потому что поле ссылки принадлежит Учителю (см. Rails doc для объяснения внешних ключей). Вы могли бы увидеть, что он смотрит на параметры: он был вложен в учитель – apneadiving

2

teacherType_id в настоящее время присваивается строка в TeachersController # новый взгляд, но он объявлен как целое. Проверьте свое мнение. Плюс я бы избегал использовать имена со смешанными случаями, такими как teacherType_id ...

+0

+1 согласился с замечанием для согласованного синтаксиса – apneadiving

+0

, но teacherType_id должен быть идентификатором для модели teacherType. Как получается, что teacher_type_id также является опцией? – omarArroum

Смежные вопросы