对于在迁移中循环模型不起作用

时间:2014-05-05 00:46:15

标签: ruby-on-rails activerecord ruby-on-rails-4

我有这个迁移,即编辑所有预先存在的配置文件。迁移无效。

class FixProfilesForNewFields < ActiveRecord::Migration
  def change
    Profile.all do |p|
      p.public = true
      p.email_settings = "normal"
      p.save
    end
  end
end

2 个答案:

答案 0 :(得分:1)

试试这个:

class FixProfilesForNewFields < ActiveRecord::Migration
  def change
    Profile.all do |p|
      p.public = true
      p.email_settings = "normal"
      p.send
      p.save!
    end
  end
end

答案 1 :(得分:1)

  1. 尝试使用def self.up代替def change(当然等同于def self.down

  2. 如果您在查询前有结构更改说明,则需要在查询前致电Profile.reset_column_information

  3. 结果:

    class FixProfilesForNewFields < ActiveRecord::Migration
      def self.up
        # change_column, add_column, etc ...
    
        Profile.reset_column_information
    
        Profile.all do |p|
          p.public = true
          p.email_settings = "normal"
          p.save
        end
      end
    
      def self.down
        # remove_column, change_columns, etc...
      end
    end
    

    如果你仍有问题,你应该使用backtrace选项运行rake并在你的问题中粘贴错误堆栈rake db:migrate --backtrace