2

一部のシードが保存されていないようです。手始めに、コンソールセッションを表示して、「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
4

2 に答える 2

3

走りましたか...

ce420L.save!

...インストラクターを割り当てた後?

于 2011-06-04T22:06:55.837 に答える
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_createce420Lの後に誤ったコンマがありました。
  2. コースの作成と一緒に割り当てを行うと、システムがce420Lを2回検証して保存することを防ぎます。
  3. 私が行ったように、特定のIDを割り当ててみることができます。つまり、ce420L.instructor_id=..。

これが機能しない場合は、インストラクターモデルをチェックして、コールバックが邪魔になっていないことを確認してください。

于 2011-06-04T22:17:50.513 に答える