Validation Rails3:在存储到数据库之前验证文本最大长度

Validation Rails3:在存储到数据库之前验证文本最大长度,validation,ruby-on-rails-3.2,rails-postgresql,Validation,Ruby On Rails 3.2,Rails Postgresql,我目前正在Rails模型中使用“store”将各种内容持久化到散列中。这很方便,因为我不必为此数据创建很多单独的属性,它为我序列化/反序列化,并且我可以根据需要轻松访问每个单独的散列属性。代码段(简化): 类请求

我目前正在Rails模型中使用“store”将各种内容持久化到散列中。这很方便,因为我不必为此数据创建很多单独的属性,它为我序列化/反序列化,并且我可以根据需要轻松访问每个单独的散列属性。代码段(简化):

类请求
我意识到当/如果:数据变得非常大(一个完全不同的主题)时,这种设计可能并不理想,但同时,我想知道以下几点:

  • “文本”列的默认最大大小是多少?我目前使用的是PostGres DB,我相信它在幕后使用的是VARCHAR,但不确定该列在DB中的最大大小是多少
  • 我可以在Rails迁移创建表代码中显式设置此:数据文本列的最大大小吗
  • 如果我试图在this:data属性太大的地方保存记录,Rails会怎么做?研究让我相信它会把它切碎,然后储存它能装的东西(非常糟糕!)
  • 如何最好地防止潜在的哈希损坏,并在存储到数据库之前验证:data size
    在迁移中设置最大长度

    然后验证模型中的长度


    谢谢,这就回答了#2,并且很容易实现#4。但是,我仍然很好奇,是否有人知道Rails通过PostGres(实际的PG SQL)中的“文本”类型迁移创建了什么,默认的最大大小是多少?关于#3,有了验证,这永远不会是一个问题。但是,我相信如果您的数据长度超过了最大长度,它可能会抛出一个错误?为什么不试试看呢?是的,当我显式地将限制设置为较小值时,我验证了验证错误。然而,我还没有时间构建一个适当的测试来自动生成一些非常大的东西,以查看默认的最大大小是什么(当我没有设置限制时)。我猜默认的最大值是相当大的…有一个答案#1记录在SO上:也就是说,可以存储的最大长度是1GB
    class Request < ActiveRecord::Base
      attr_accessible :data
    
      # Data is a nested hash
      store :data
    
      # Validation
      validates_presence_of :data
    end