【问题标题】:Rails: Some seeds don't appear to be savingRails:一些种子似乎没有保存
【发布时间】:2011-06-04 22:02:18
【问题描述】:

看来我的一些种子没有保存。对于初学者,我将显示一个控制台会话,以便您可以看到确实在控制台中设置了“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。

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

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

【问题讨论】:

  • 等等...问题是没有创建讲师本身?或者课程与讲师无关?
  • 课程未与讲师绑定。
  • 反正不是我以前的方式,我想创建很多讲师,创建很多课程,然后将所有这些讲师分配给课程。每个都在种子文件中的一个单独区域中。但显然我必须一次完成,这将是一个巨大的痛苦。
  • 您不必一次完成所有操作。它只是快一点,因为系统不必两次验证/保存课程。如果更容易的话,你可以把工作分开。

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


【解决方案1】:

你跑了吗……

ce420L.save!

...在指派导师之后?

【讨论】:

  • 我正在播种很多课程,其中很多都已命名。这怎么行不通:把“保存课程” Course.all.each 做 |course|当然。保存!有没有办法保存所有未保存的模型?我很困惑为什么它保存在控制台中,而不是种子。
  • Course.all.each 只检索数据库中已经保存的课程
【解决方案2】:

这样做要快得多:

### 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. 您在 ce420L 上的 find_or_create 后面有一个错误的逗号。
  2. 在创建课程的同时完成作业会阻止系统两次验证和保存 ce420L。
  3. 您可以尝试像我一样分配特定的 ID,即 ce420L.instructor_id = ...

如果这不起作用,请检查您的讲师模型以确保您没有任何回调妨碍您。

【讨论】:

  • 编辑我的帖子时出现错误的逗号。我会做一些检查,谢谢。
  • 好吧,这确实对我有用...我仍然不知道为什么它不能早些工作...现在因为我有很多种子,我的种子文件将看起来很糟糕。
  • @ardavis - 如果你想保留你的种子文件,试着解构我上面建议的部分,直到你得到你正在寻找的分离。可以单独指派导师,试试吧!
猜你喜欢
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多