Rails:有些种子似乎没有储蓄

时间:2011-06-04 22:02:18

标签: ruby-on-rails associations seed ruby-on-rails-3.1

看来我的一些种子没有储蓄。对于初学者,我将显示一个控制台会话,以便您可以看到'instructor_id'确实在控制台中设置,但在我播种时却没有。

ruby-1.9.2-p180 :015 > c = Course.find 2
  Course Load (1.6ms)  SELECT "courses".* FROM "courses" WHERE "courses"."id" = $1 LIMIT 1  [["id", 2]]
 => #<Course id: 2, name: "Microcomputers II Lab", course_code: "CE-420L", instructor_id: nil, school_id: nil, created_at: "2011-06-04 19:40:32", updated_at: "2011-06-04 19:40:32"> 
ruby-1.9.2-p180 :016 > c.instructor = Instructor.first
  Instructor Load (0.6ms)  SELECT "instructors".* FROM "instructors" LIMIT 1
 => #<Instructor id: 1, name: "Instructor Name", created_at: "2011-06-04 19:40:32", updated_at: "2011-06-04 19:40:32"> 
ruby-1.9.2-p180 :017 > c
 => #<Course id: 2, name: "Microcomputers II Lab", course_code: "CE-420L", instructor_id: 1, school_id: nil, created_at: "2011-06-04 19:40:32", updated_at: "2011-06-04 19:40:32"> 

通过查看控制台,您可以看到当我调用c.instructor = Instructor.first时,它正确设置了我的instructor_id。

现在,在种子文件中我有变量。 (这只是一个片段)

### Instructors ###
puts "Creating Instructors"
instructor_1  = Instructor.find_or_create_by_name("Instructor Name")

### Courses ###
puts "Creating Courses"
ce420L   = Course.find_or_create_by_name("Microcomputers II Lab",                    :course_code => "CE-420L")

### Add the Instructor to the Course ###
puts "Adding an Instructor to the Courses"
ce420L.instructor  = instructor_1

但是当我使用'rake db:seed'运行种子时,它正确地创建了我的所有模型,以及我的大部分关系。但它没有正确设置教师。

思想?

编辑:

刚试过:

ce420   = Course.find_or_initialize_by_name("Microcomputers II")
ce420.instructor_id  = instructor_1.id
ce420.save!

并没有保存我的导师。

以下是我的模特。

class Instructor < ActiveRecord::Base
  ### ASSOCIATIONS ###
  has_many :courses
end

class Course < ActiveRecord::Base
  belongs_to :instructor
end

2 个答案:

答案 0 :(得分:3)

你跑了......

ce420L.save!

...在分配教师后?

答案 1 :(得分:1)

要快得多:

### Courses ###
puts "Creating Courses belonging to Instructor 1"
ce420L   = Course.find_or_initialize_by_name("Microcomputers II Lab")                    :course_code => "CE-420L")
ce420L.instructor_id = instructor_1.id
ce420L.save

请注意以下事项:

  1. 您在find_or_create ce420L之后有一个错误的逗号。
  2. 与课程创建一起完成作业可防止系统两次验证和保存ce420L。
  3. 你可以尝试像我一样分配特定的ID,即ce420L.instructor_id = ...
  4. 如果这不起作用,请检查教师模型以确保没有任何回调妨碍。