rails 3/postgres - 如果不应用,则为字符串多长时间:模式中的限制

jpw*_*ynn 13 string postgresql activerecord ruby-on-rails rails-activerecord

我的googlefu必须是弱的,因为我无法找到任何告诉我Rails应用程序中字符串列的默认限制(在Heroku上托管,使用PostgreSQL作为数据库).

任何帮助,将不胜感激!

mu *_*ort 21

如果您未指定特定限制,ActiveRecord将使用varchar(255)(或character varying (255)迂腐).你总是可以跳进PostgreSQL,psql并说\d your_table要像PostgreSQL看到的那样得到表.

我不认为默认值是在任何地方指定的,但它在源代码中就在这里:

NATIVE_DATABASE_TYPES = {
  :primary_key => "serial primary key",
  :string      => { :name => "character varying", :limit => 255 },
  #...
Run Code Online (Sandbox Code Playgroud)

最接近规范的是迁移指南:

这些将映射到适当的底层数据库类型,例如将MySQL :string映射到VARCHAR(255).

但这不是关于PostgreSQL而不是完全保证.


顺便说一句,如果你正在使用PostgreSQL,你应该几乎总是直接去:text假装:string不存在.PostgreSQL在内部对待它们除了它必须进行长度检查varchar.我在另一个答案中对此进行了更多的讨论:在rails中将列类型更改为更长的字符串.


kir*_*lev 9

在rails 4中,字符串类型没有默认限制,您可以在源代码中看到:

NATIVE_DATABASE_TYPES = {
        primary_key: "serial primary key",
        bigserial: "bigserial",
        string:      { name: "character varying" },
        text:        { name: "text" },
        #...
Run Code Online (Sandbox Code Playgroud)

如果你没有指定一个限制,ActiveRecord将只设置character varying你可以存储一个任何长度的字符串,如文档中所述:

如果在没有长度说明符的情况下使用字符变化,则该类型接受任何大小的字符串