Rails / ActiveRecord中的种子关系

时间:2012-09-14 19:08:45

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2 seed

在我的Rails 3.2.8项目的db / seeds.rb文件中,我创建种子数据:

level_1 = Level.create(number: 1)

我的Level模型是:

class Level < ActiveRecord::Base
  attr_accessible :number
  has_many :lessons
end

那么我想要上课:

Lesson.create(number: 5, level: level_1)

它的模型是:

class Lesson < ActiveRecord::Base
  attr_accessible :level_id, :number
  belongs_to :level
end

当我运行rake db:setup时,我收到以下错误:

  耙子流产了!无法批量分配受保护的属性:级别

如何让它工作,我是否需要将:level添加到Lesson模型中的attr_accessible元素列表中?这是一个坏主意吗?我应该简单地创建一个Lesson而不是Level然后再调用lesson.level = level_1吗?

UDPATE :在seeds.rb文件中生成的rails会显示以下示例:

cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
Mayor.create(name: 'Emanuel', city: cities.first)

1 个答案:

答案 0 :(得分:1)

您希望能够批量分配level吗?换句话说,如果课程对象的表单可以设置级别属性,那会有害吗?

如果不会导致问题,请继续将其添加到attr_accessible,并继续执行您现在正在做的事情。

如果 会导致问题,请使用.new并手动设置:

lesson = Lesson.new
lesson.level = level_1
lesson.save