1

我正在重构一个 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 方法,但在执行数据库迁移之前它不存在。

有任何想法吗?谢谢

4

2 回答 2

1

而不是change_column,尝试:

rename_column :configuration_values, :set, :configuration_set
于 2013-03-04T17:07:38.160 回答
0

运行迁移会崩溃,因为动态方法find_by_configuration_set_and_key未定义。此动态方法将仅在迁移执行后定义,因为迁移正在将列重命名setconfiguration_set.

我现在找到了一种执行迁移的方法,尽管它并不完美。

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

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

于 2013-03-05T09:50:48.250 回答