gpt4 book ai didi

ruby-on-rails - 使用 PostgreSQL 适配器限制 ActiveRecord 迁移 5.0 中的文本列

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

我的迁移看起来像这样

class CreateQuestionings < ActiveRecord::Migration[5.0]
def change
create_table :questionings do |t|
t.text :body, null: false, limit: 260
end
end
end

现在,当我运行 $ rake db:migrate:reset 时,在我的 db/schema.rb 中看不到限制:

create_table "questionings", force: :cascade do |t|
t.text "body", null: false
end

我做错了吗还是这是一个错误?

顺便说一下,我使用的是 rails 5.0.0.beta3 和 ruby​​ 2.3.0p0。

最佳答案

t.text 在 PostgreSQL 和 text doesn't allow for size limits 中生成一个 text 列因为 text 是:

variable unlimited length

由于数据库不支持限制,PostgreSQL 驱动程序不会寻找 :limit 选项;请记住,您说的是 t.text(column_name, options_hash) 因此您可以将任何您想要的内容放入 options_hash 并且驱动程序将忽略任何不是的内容专门找。

如果你想限制列的大小,那么你可以手动添加一个 CHECK 约束(ActiveRecord 无法理解,所以你必须从 schema.rb 切换到 structure .sql) 或使用 varchar 列(也称为 t.string):

t.string :body, null: false, limit: 260

此外,您的 schema.rb 是根据数据库中的内容生成的,而不是根据迁移中的内容生成的。由于 text 不支持限制,数据库不会知道您的 limit: 260 选项;如果数据库不知道它,当 ActiveRecord 向数据库询问模式信息时,ActiveRecord 将不会从数据库中取回它。

关于ruby-on-rails - 使用 PostgreSQL 适配器限制 ActiveRecord 迁移 5.0 中的文本列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36755359/

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