开发者

Rails: Some seeds don't appear to be saving

开发者 https://www.devze.com 2023-03-11 14:07 出处:网络
It appears some of my seeds are not saving. For starters, I will show a console session so you can see that the \'instructor_id\' is indeed being set in the console, but not when I seed.

It appears some of my seeds are not saving. For starters, I will show a console session so you can see that the 'instructor_id' is indeed being set in the console, but not when I seed.

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"> 

From looking at the console, you can see that when I call c.instructor = Instructor.first, it is correctly setting my instructor_id.

Now, in the seeds file I have variables. (This is just a snippet)

### 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

But when I run the seeds using 'rake db:seed', it is correctly creating all of my models, and most of my relationships. But it is not setting the instructor properly.

Thoughts?

EDIT:

Just tried:

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

And it did not save my instructor.

Here ar开发者_如何学Pythone my models.

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

class Course < ActiveRecord::Base
  belongs_to :instructor
end


Did you run...

ce420L.save!

... after assigning the instructor?


Much faster to do this:

### 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

Note the following:

  1. You had an errant comma after your find_or_create on ce420L.
  2. Doing the assignment together with the course creation prevents the system from validating and saving ce420L twice.
  3. You can try assigning the specific ID as I did, i.e. ce420L.instructor_id = ...

If this doesn't work, check your Instructor Model to ensure you don't have any callbacks getting in the way.

0

精彩评论

暂无评论...
验证码 换一张
取 消