0

非常に特殊な方法でデータベースをシードしようとしています。これが私の /db/seeds.rb ファイルです:

# 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: 'testemail@testemail.com')

# 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

私は何か間違ったことをしていますか?

4

2 に答える 2

1
 Keyword.find_or_create_by_user_id

これは犯人のように見えます。

そのため、その user_id を持つオブジェクトを初めて作成し、その後は毎回同じオブジェクトをフェッチします。

それを変更する可能性があります

Keyword.find_or_create_by_message1
于 2012-10-18T05:36:49.287 に答える
0

自分のやり方の間違いに気づきました。私のkeywords_ary.eachループでは、Keyword.find_or_create_by_user_id各キーワードを作成するために使用されます。問題は、各キーワードが同じ user_id を持っていることです。したがって、最初のキーワードが見つかるか作成された後、ループは終了します。

に変更しましたがKeyword.find_or_create_by_user_id_and_name、問題なく動作します。

于 2012-10-18T05:38:06.370 に答える