Рельсы: некоторые семена, кажется, не спасают - PullRequest
2 голосов
/ 05 июня 2011

Кажется, некоторые мои семена не спасают.Для начала я покажу сеанс консоли, чтобы вы могли видеть, что '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.

Теперь в файле seed у меня есть переменные.(Это всего лишь фрагмент)

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

Но когда я запускаю seed, используя '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 ]

3 голосов
/ 05 июня 2011

Вы запускали ...

ce420L.save!

... после назначения инструктора?

1 голос
/ 05 июня 2011

Намного быстрее сделать это:

### 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. Вы можете попытаться присвоить определенный идентификатор, как я, например, ce420L.instructor_id = ...

Если это не сработает, проверьте свою модель инструктора, чтобы убедиться, что на вашем пути нет никаких обратных вызовов.

...