如何在Rails种子中引用变量id

时间:2014-07-09 14:13:06

标签: ruby-on-rails seeding

我在seeds.rb文件中手动播种数据库。我有类似以下内容:

# Users
puts 'SETTING UP DEFAULT USER LOGIN'.colorize( :color => :light_blue, :background => :green )
  chris = User.create(:email => "asdf@asdf.com", :password => "asdfasdf", :password_confirmation => "asdfasdf").save!
  teacher1 = User.create(:email => "t1@asdf.com", :password => "asdfasdf", :password_confirmation => "asdfasdf").save!
  student1 = User.create(:email => "s1@asdf.com", :password => "asdfasdf", :password_confirmation => "asdfasdf").save!

稍后,我创建了一些歌曲,并希望将它们分配给用户:

# Songs
puts 'SETTING UP DEFAULT SONGS'.colorize( :color => :white, :background => :black )
  songs1 = Song.create( title: 't1', content: 'c1', :user_id => chris.index ).save!
  songs2 = Song.create( title: 't2', content: 'c2', user_id: chris.index ).save!
  songs3 = Song.create( title: 't3', content: 'c3', user_id: chris:index ).save!
  songs4 = Song.create( title: 't4', content: 'c4', :user_id => chris.id ).save!

您会注意到列user_id有三种不同的尝试,所有这些尝试都失败了。 如何使用我为其分配的变量[christ1s1]插入我之前创建的用户的唯一索引?

API只讨论如何手动或使用循环。

1 个答案:

答案 0 :(得分:3)

您的问题是.save!方法。它返回布尔值,这就是为什么christeacher1student1是布尔值而不是objects的原因。您不需要save!,因为create也会将记录保存在数据库中,并返回该对象。

从每行中删除.save!并使用.id,您就会很好。