创建后资源ID为零 - 为什么?

时间:2014-11-06 18:03:57

标签: ruby-on-rails

所以我在我的种子中得到了这个.rb

15.times do
  topic = Topic.create(
      name: Faker::Lorem.word,
  )
  color = topic.color_topic
  topic.update_attributes(color:color)
end

在模型中调用它

def color_topic # distributes color-0 thru color-4 equally through all topics
  puts self.id
  "color-#{self.id % 5}"
end

我不断得到这样的东西

122
123
124
125
126
127
128
129
130

rake aborted!
NoMethodError: undefined method `%' for nil:NilClass

因此,ruby会在ActiveRecord分配id之前运行吗? 我以为这种逻辑一直在使用。 我错过了什么?

1 个答案:

答案 0 :(得分:1)

在播种具有唯一性限制的数据方面,我不建议将其留给随机机会(即Faker :: Lorem)。这样做更容易:

(1..15).each do |i|
   topic = Topic.create(name: "name#{i}")
end

另外,作为旁注,您可能希望使用工厂女孩为您的数据播种,因为它比开箱即用的播种框架更强大:https://github.com/thoughtbot/factory_girl