2013-03-15 79 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 

我创建了属于一门课程一节课。教程创建成功

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

你在创建'lesson'时是否通过了'course_id'?发布创建'课程'的代码。 – shweta 2013-03-15 12:44:54

+0

是选择下拉菜单中显示的课程我选择课程附加课程,但在课程显示页面课程字段为零 – 2013-03-15 12:53:46

+0

因为'course_id'没有保存。在'Lesson'模型中放置'validates:course_id,:presence => true'行。它不会让任何'课程'创建与'零course_id' – shweta 2013-03-15 13:00:16

回答

2

您需要删除模型中的attr_accessor :course_id行。如果你有这条线,它将在你的模型中创建以下与默认定义内容相冲突的方法

def course_id 
    @course_id 
end 

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

如果我删除该行,我得到这个错误“ActiveModel :: MassAssignmentSecurity ::错误:无法批量分配受保护的属性:courses_id” – 2013-03-15 13:17:55

+2

你传递'courses_id'而不是'course_id'。检查你的代码。 – jvnill 2013-03-15 13:19:26

+0

我纠正错误课程的错误,但原始问题在那里,因为它是 – 2013-03-15 13:25:23

2

删除attr_accessor :course_id在您的Lesson模型。这将覆盖activerecord的默认行为。

+0

如果我删除该行,我得到这个错误“ActiveModel :: MassAssignmentSecurity ::错误:无法批量分配受保护的属性:courses_id“ – 2013-03-15 13:18:14

+0

你真正想要的是'attr_accessible:course_id'。 – thomasfedb 2013-03-15 16:47:46