在 运行 迁移中加入 table 错误
Join table error on running migration
我有两个模型 rails 5.1
class Category < ActiveRecord::Base
has_and_belongs_to_many :sub_categories, join_table: "categories_join_table"
end
class SubCategory < ActiveRecord::Base
has_and_belongs_to_many :categories, join_table: "categories_join_table"
end
我添加了多个迁移,问题是当我尝试 运行 迁移时出现错误 ERROR: relation "comfort_factor_sub_categories" does not exist
因为在迁移中创建 table comfort_factor_sub_categories 将 运行 在以后的迁移中。我该如何处理?
注意:我无法更改 join_table 的名称,因为它只是一个示例,我的名称很长。
如果我对你的问题的理解正确,你已经添加了几个迁移,但你不能运行它们,因为没有找到某些关系。
在那种情况下,你应该duplicate the classes in migrations:
class CreateCategories < ActiveRecord::Migration[5.1]
class Category < ActiveRecord::Base
# without declaring the relationship with the table which does not exist yet
end
def up
create_table :categories do |t|
# t.something
end
end
def down
drop_table :categories
end
end
然后您应该为 SubCategory
做同样的事情。
创建合适的join_table,可以参考Rails official documentation
在撰写本文时,这个问题已有三年多了,但我 运行 遇到了同样的问题,所以我想在这里分享我的解决方案。
就我而言,我是 运行ning Rails 6.1,所以我的错误消息看起来有点不同:
StandardError: An error has occurred, this and all later migrations canceled:
Could not find table 'officers_users'
officers_users
table 是在后来的迁移中创建的连接 table,但是有问题的迁移没有使用它,所以为什么我收到此错误?
起初,我认为这可能是一个 Rails 错误,因为我的迁移使用 update_columns
修改用户 table,这不应该 运行回调,但后来我注意到我更新它们的值依赖于计算属性,而计算属性又依赖于 officers_users
连接 table。所以 Rails 是对的,我错了(再一次,哈)!解决方案只是让失败的迁移自给自足,而不需要计算属性。一旦我这样做了,一切又好了。
因此,如果您 运行 遇到同样的问题,我建议您仔细检查您的迁移,并查找可能使用稍后迁移的连接 table 的任何隐藏依赖项。
我有两个模型 rails 5.1
class Category < ActiveRecord::Base
has_and_belongs_to_many :sub_categories, join_table: "categories_join_table"
end
class SubCategory < ActiveRecord::Base
has_and_belongs_to_many :categories, join_table: "categories_join_table"
end
我添加了多个迁移,问题是当我尝试 运行 迁移时出现错误 ERROR: relation "comfort_factor_sub_categories" does not exist
因为在迁移中创建 table comfort_factor_sub_categories 将 运行 在以后的迁移中。我该如何处理?
注意:我无法更改 join_table 的名称,因为它只是一个示例,我的名称很长。
如果我对你的问题的理解正确,你已经添加了几个迁移,但你不能运行它们,因为没有找到某些关系。
在那种情况下,你应该duplicate the classes in migrations:
class CreateCategories < ActiveRecord::Migration[5.1]
class Category < ActiveRecord::Base
# without declaring the relationship with the table which does not exist yet
end
def up
create_table :categories do |t|
# t.something
end
end
def down
drop_table :categories
end
end
然后您应该为 SubCategory
做同样的事情。
创建合适的join_table,可以参考Rails official documentation
在撰写本文时,这个问题已有三年多了,但我 运行 遇到了同样的问题,所以我想在这里分享我的解决方案。
就我而言,我是 运行ning Rails 6.1,所以我的错误消息看起来有点不同:
StandardError: An error has occurred, this and all later migrations canceled:
Could not find table 'officers_users'
officers_users
table 是在后来的迁移中创建的连接 table,但是有问题的迁移没有使用它,所以为什么我收到此错误?
起初,我认为这可能是一个 Rails 错误,因为我的迁移使用 update_columns
修改用户 table,这不应该 运行回调,但后来我注意到我更新它们的值依赖于计算属性,而计算属性又依赖于 officers_users
连接 table。所以 Rails 是对的,我错了(再一次,哈)!解决方案只是让失败的迁移自给自足,而不需要计算属性。一旦我这样做了,一切又好了。
因此,如果您 运行 遇到同样的问题,我建议您仔细检查您的迁移,并查找可能使用稍后迁移的连接 table 的任何隐藏依赖项。