2013-03-15 5 views
0

Вот моя модель курсRails BELONGS_TO ассоциация не работает

class Course < ActiveRecord::Base 
    attr_accessible :longdescription, :shortdescription, :title, :published_at 
    has_many :lessons, :foreign_key => 'course_id' 
end 

И вот мой урок модель

class Lesson < ActiveRecord::Base 
    belongs_to :course, :class_name => 'Course' 
    attr_accessor :course_id 
    attr_accessible :description, :title, :course_id 
end 

I создает урок, который принадлежит к курсу. Урок успешно создан

Lesson.create(:title => "testing", :description => "causing problems", :course_id => 1) 

Но когда я прихожу к записи урока, я получил course_id = nil. Любая помощь???

<Lesson id: 8, title: "testing", description: "causing problems", course_id: nil, created_at: "2013-03-15 12:56:36", updated_at: "2013-03-15 12:56:36"> 
+0

Вы передаете 'course_id' при создании' урока'? Отправьте код создания 'урока'. – shweta

+0

Да Курсы отображаются в раскрывающемся списке выбора. Я выбираю курс для прикрепления с уроком, но на странице урока. Поле курса - это нуль –

+0

Поскольку 'course_id' не сохраняется. Поместите 'validates: course_id,: presence => true' строку в вашу модель« Lesson ». Это не даст никакого «урока», созданного с помощью «nil course_id» – shweta

ответ

2

Вам необходимо удалить строку attr_accessor :course_id в вашу модель. Если у вас есть эта строка, она создает следующие методы в вашей модели, которые конфликтуют с тем, что определено по умолчанию.

def course_id 
    @course_id 
end 

def course_id=(cid) 
    @course_id = cid 
end 
+0

Если я удалю эту строку, я получил эту ошибку «ActiveModel :: MassAssignmentSecurity :: Ошибка: не могу назначить защищенные атрибуты: courses_id» –

+2

, вы проходите в 'course_id', а не' course_id'. проверьте свой код. – jvnill

+0

Я исправляю ошибки в ошибках, но проблема с orignal существует там, где была –

2

attr_accessor :course_id Удалить в вашей Lesson модели. Это переопределит поведение по умолчанию для activerecord.

+0

Если я удалю эту строку, я получил эту ошибку «ActiveModel :: MassAssignmentSecurity :: Ошибка: не может назначить массу protected attributes: courses_id " –

+0

Что вы действительно хотите, это' attr_accessible: course_id'. – thomasfedb

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