加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用PostgreSQL适配器限制ActiveRecord迁移5.0

发布时间:2020-12-17 03:24:55 所属栏目:百科 来源:网络整理
导读:我有一个看起来像这样的迁移 class CreateQuestionings ActiveRecord::Migration[5.0] def change create_table :questionings do |t| t.text :body,null: false,limit: 260 end endend 现在当我运行$rake db:migrate:reset时,在我的db / schema.rb中无处
我有一个看起来像这样的迁移

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中生成一个文本列,因为文本是:

variable unlimited length

由于数据库不支持限制,因此PostgreSQL驱动程序不会查找:limit选项;请记住,你正在说t.text(column_name,options_hash),所以你可以把任何你想要的东西扔进options_hash,驱动程序将忽略它没有特别寻找的任何东西.

如果要限制列大小,则可以手动添加CHECK约束(ActiveRecord将无法理解,因此您必须从schema.rb切换到structure.sql)或使用varchar列(AKA t.string) ):

t.string :body,limit: 260

此外,schema.rb是根据数据库中的内容生成的,而不是基于迁移中的内容生成的.由于文本不支持限制,因此数据库不会知道您的限制:260选项;如果数据库不知道它,当ActiveRecord向数据库询问架构信息时,ActiveRecord将不会从数据库中获取它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读