ruby-on-rails – 使用PostgreSQL适配器限制ActiveRecord迁移5.0
我有一个看起来像这样的迁移
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中生成一个文本列,因为文本是:
由于数据库不支持限制,因此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将不会从数据库中获取它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |