2012-10-18 35 views
0

我想以非常特殊的方式为我的数据库播种。这里是我的/db/seeds.rb文件:为什么rake db:种子没有像预期的那样行为?

# creates a school in a local database. 
test_school = School.find_or_create_by_email(school_name: "Test School One", client_user_name: 'admin', client_password: 'Secretz1', fname: 'John', lname: 'doe', client_short_code: "72727", email: '[email protected]') 

# creates a user in local database 
test_user = User.find_or_create_by_email(email: test_school.email, password: test_school.client_password, full_name: test_school.full_name, user_role: 'admin', school_id: test_school.id) 

# creaate school via API 
results = School.create_via_api test_school 

if results[0].to_i == 0 
    test_school.update_attribute :client_number, results[2].split(" ").first 
    SchoolMailer.registration_confirmation(test_user, test_school).deliver 
else 
    test_school.destroy 
    test_user.destroy 
end 

# an array of keyword topics 
keywords_ary = ["lunch", "schoolout?", "thenews", "holidays", "buses", "help"] 
# create a keyword object for each topic in the above array 
keywords_ary.each do |n| 
    message = "" 
    Array(1..5).each do |i| 
    message += "#{i}. Test for @ts#{n}\n" 
    end 
    Keyword.find_or_create_by_user_id(
    name: "@ts#{n} test", keyword: "@ts#{n}", 
    message1: message, 
    user_id: test_user.id 
    ) 
end 

# create each of the keywords via API 
test_user.keywords.each do |keyword| 
    results = Keyword.create_on_avid keyword, test_user 
    if results[0].to_i == 0 
    #save the api id to the local database 
    keyword.update_attribute :keyword_id, results[2] 
    else 
    keyword.destroy 
    end 
end 

那么是什么问题?好吧,当我检查我的数据库只有第一个关键字创建,并为关键字MESSAGE1场看起来是这样的:

--- - 1 - 2 - 3 - 4 - 5 

当它应该是这样的:

1. this is a test for @tslunch 
2. this is a test for @tslunch 
3. this is a test for @tslunch 
4. this is a test for @tslunch 
5. this is a test for @tslunch 

我做有问题?

+0

出于兴趣:为什么一切都是双倍间隔? –

+0

我不知道,它不在我的编辑器中。我复制并粘贴,但没有真正关注间距。 –

+1

好的。我为你解决它。你在哪里看到这个message1字段?你如何从数据库中检索该值? –

回答

1
Keyword.find_or_create_by_user_id 

这看起来是罪魁祸首,因为你正在做find_or_create_by_user_id

所以它第一次将创建一个对象与USER_ID,并且每次经过它会获取相同的对象。

可能会改变,要

Keyword.find_or_create_by_message1 
+0

当我发布我的时候我没有注意到你的答案,但是谢谢! –

0

我发现我的方式错误。在我的keywords_ary.each循环中,使用Keyword.find_or_create_by_user_id来创建我的每个关键字。问题在于,每个关键字都有相同的user_id。因此,在找到或创建第一个关键字后,退出循环。

我把它改为Keyword.find_or_create_by_user_id_and_name,没有,它工作得很好。

相关问题