Rails数据库鸡和蛋错误

时间:2013-03-04 16:09:55

标签: ruby-on-rails rails-migrations

我正在重构一个Rails应用程序。在一个表格中,我有一个名为set的列,我需要将其重命名为configuration_set。我已经更改了代码以应对更改,并创建了一个迁移来重命名列。

现在的问题是我无法运行迁移:

class AlignConfigurationValuesColumns < ActiveRecord::Migration

def self.up
  rename_column :configuration_values, :set, :configuration_set
end

我收到以下错误:

rake aborted!
undefined method `find_by_configuration_set_and_key' for #<Class:0x7f2c7a879580>

undefined函数是一个动态的find_by方法,它在新代码上调用,但在执行数据库迁移之前它不存在。

有什么想法吗? THX

2 个答案:

答案 0 :(得分:1)

而不是change_column,请尝试:

rename_column :configuration_values, :set, :configuration_set

答案 1 :(得分:0)

由于未定义动态方法find_by_configuration_set_and_key,因此运行迁移会崩溃。只有在迁移将列set重命名为configuration_set时,才会在执行迁移后定义此动态方法。

我现在已经找到了一种执行迁移的方法,虽然它并不完美。

调用方法find_by_configuration_set_and_key的代码位于插件中。我更改了environment.rb,以便不加载插件,这使我可以运行Rails数据库迁移。然后我把它放回去并重新启动应用程序。

这个解决方案比使用mysql客户端更好,但仍然是一个黑客。 感谢大家的好主意和讨论。