gpt4 book ai didi

ruby-on-rails - 输入字符串长于 NAMEDATALEN-1 (63) Ruby on Rails 4

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:05 25 4
gpt4 key购买 nike

我在 Ruby on Rails 应用程序中重命名表时遇到问题。我有模型 CarAddition,现在我必须将它重命名为 AvailableCarAddition。所以我写迁移:

class RenameCarAdditionsToAvailableCarAdditions < ActiveRecord::Migration
def change
rename_table :car_additions, :available_car_additions
rename_column :car_additions_assignments, :car_addition_id, :available_car_addition_id
rename_column :car_addition_translations, :car_addition_id, :available_car_addition_id
rename_table :car_addition_translations, :available_car_addition_translations
end
end

当我尝试运行它时出现以下错误:

Input string is longer than NAMEDATALEN-1 (63)/home/mateusz/.rvm/gems/ruby-2.1.1@rentcar/gems/activerecord-4.0.4/lib/active_record/connection_adapters/postgresql/quoting.rb:154:in `quote_ident'

这一行导致了问题:

rename_table :car_addition_translations, :available_car_addition_translations

我该如何解决这个问题?

最佳答案

这是 PostgreSQL 的限制。在编译时,NAMEDATALEN 常量定义标识符的最大长度。 (默认情况下为 64)。如果不重新编译 PostgreSQL,就无法更改它。

很可能是索引名称 达到了字符数限制。这是因为 Rails 4 rename_table 还会重命名现有索引,而自动生成的索引名称往往会变得很长。

目前无法禁用索引重命名,但您可以绕过它:

使用rename_index 将您的索引重命名为不同于调用rename_table 之前自动生成的名称。因为接下来的 rename_table 将不再触及现有索引。

这可能很烦人,但无论如何您都无法保留自动生成的索引名称,您只需在重命名表之前重命名它们即可。

关于ruby-on-rails - 输入字符串长于 NAMEDATALEN-1 (63) Ruby on Rails 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23239130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com