繁体   English   中英

用于迁移的未定义方法find_each-第二次运行

[英]Undefined method find_each for migration - runs the second time

当我运行以下迁移时:“ 20150121081105_update_interest_group_entries.rb”

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

当我在控制台中运行同一行时,它工作正常: 在此处输入图片说明

奇怪的是:当我在第一次运行“ rake db:migrate”后第二次运行时,它就像是一种魅力并完成了它:

在此处输入图片说明

我在跑:

红宝石1.9.3p550(2014-10-27修订版48165)[x86_64-darwin13.4.0]

导轨3.2.19

您可能有另一个名为InterestGroupInternalTranslation的迁移,并且该迁移已加载。 该迁移的类名称与模型相同。 Rails为未迁移的类加载迁移类。 这就是为什么在运行所有迁移时都会出现错误,因为它无法在迁移类上找到find_each。 再次运行时,它将仅运行最后一次迁移,并正确使用模型类。 您应该重命名迁移类和文件名,但不要更改时间戳

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM