0

當我運行以下遷移第二次:「20150121081105_update_interest_group_entries.rb」未定義的方法find_each - 運行

class UpdateInterestGroupEntries < ActiveRecord::Migration 
    def change 
    InterestGroupTranslation.find_each do |itt| 
     if itt.alias.blank? 
     itt.alias = "alias_interest_group_" + Random.rand(100).to_s + itt.locale.to_s 
     itt.save! 
     end 
    end 

    PageTranslation.find_each do |page| 
     if page.alias.blank? 
     page.alias = "alias_page_" + Random.rand(100).to_s + page.locale.to_s 
     page.save! 
     end 
    end 

    TestimonialTranslation.find_each do |test| 
     if test.alias.blank? 
     test.alias = "alias_test_" + Random.rand(100).to_s + test.locale.to_s 
     test.save! 
     end 
    end 

    TestimonialInternalTranslation.find_each do |test_internal| 
     if test_internal.alias.blank? 
     test_internal.alias = "alias_test_internal_" + Random.rand(100).to_s + test_internal.locale.to_s 
     test_internal.save! 
     end 
    end 

    InterestGroupInternalTranslation.find_each do |ittinternal| 
     if ittinternal.alias.blank? 
     ittinternal.alias = "alias_ittinternal_" + Random.rand(100).to_s + ittinternal.locale.to_s 
     ittinternal.save! 
     end 
    end 
    end 
end 

它返回此錯誤:

== UpdateInterestGroupEntries: migrating ===================================== 
-- find_each() 
rake aborted! 
StandardError: An error has occurred, this and all later migrations canceled: 

undefined method `find_each' for #<ActiveRecord::Migration:0x007f98f8ca0e98>/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:465:in `block in method_missing' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:438:in `block in say_with_time' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:438:in `say_with_time' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:458:in `method_missing' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:334:in `method_missing' 
/Users/Vincent/Documents/remsis/db/migrate/20150121081105_update_interest_group_entries.rb:31:in `change' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:407:in `block (2 levels) in migrate' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:407:in `block in migrate' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/connection_adapters/abstract/connection_pool.rb:129:in `with_connection' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:389:in `migrate' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:528:in `migrate' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:720:in `block (2 levels) in migrate' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:775:in `call' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:775:in `block in ddl_transaction' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/transactions.rb:208:in `transaction' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:775:in `ddl_transaction' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:719:in `block in migrate' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:700:in `each' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:700:in `migrate' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:570:in `up' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/migration.rb:551:in `migrate' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/gems/activerecord-3.2.19/lib/active_record/railties/databases.rake:193:in `block (2 levels) in <top (required)>' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/bin/ruby_executable_hooks:15:in `eval' 
/Users/Vincent/.rvm/gems/ruby-1.9.3-p550/bin/ruby_executable_hooks:15:in `<main>' 

所以它在以下失敗行:

InterestGroupInternalTranslation.find_each do |ittinternal| 
    if ittinternal.alias.blank? 
    ittinternal.alias = "alias_ittinternal_" + Random.rand(100).to_s + ittinternal.locale.to_s 
    ittinternal.save! 
    end 
end 

當我在控制檯中運行相同的行它工作正常: enter image description here

奇怪的是: 當我運行「耙分貝:遷移」之後的第一第二次,它可以作爲一個魅力和完成它:

enter image description here

我米運行:

紅寶石1.9.3p550(2014年10月27日修訂版48165)[x86_64的-darwin13.4.0]

滑軌3.2.19

+2

難道您沒有像這樣命名您的任何遷移嗎? – 2015-01-21 09:27:13

+0

您可能有另一個名爲'InterestGroupInternalTranslation'的遷移並且加載了一個 – bcd 2015-01-21 09:35:22

+0

@bcd我有另一個名爲「20140904083721_interest_group_internal_translation.rb」的遷移爲什麼這是一個問題? – Vinozio 2015-01-21 10:27:03

回答

2

您可能有另一個名爲InterestGroupInternalTranslation的遷移,並且該遷移已加載。該遷移的類名與模型相同。 Rails爲未遷移的遷移類加載遷移類。這就是爲什麼當你運行所有遷移時,它會給你一個錯誤,因爲它無法在遷移類上找到find_each。當您再次運行時,它將只運行最後一次遷移並正確使用模型類。您應該重新命名遷移類和文件名,但不要更改時間戳

+1

謝謝!我從你的帖子中學到了很多東西。 – Vinozio 2015-01-22 09:55:41