我正在重构一个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
答案 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客户端更好,但仍然是一个黑客。 感谢大家的好主意和讨论。