use*_*677 3 postgresql ruby-on-rails ruby-on-rails-5
我正在使用 Rails 5 和 POSTGRES,需要添加一个数组列。我见过不同的语法来做到这一点。
之间的迁移有什么区别..
t.string, :A_options array: true, default: []
Run Code Online (Sandbox Code Playgroud)
和
t.integer, :A_options array: true, default: []
Run Code Online (Sandbox Code Playgroud)
和
t.array, :A_options
Run Code Online (Sandbox Code Playgroud)
为什么指定类型为整数或字符串?前两个与后一个有何不同?
另外,有没有办法使用 Rails 生成器添加带有 default:[] 的数组?
这将创建一个字符串数组,其默认值是一个空数组:
t.string :A_options, array: true, default: []
Run Code Online (Sandbox Code Playgroud)
这将创建一个整数数组,其默认值是空数组:
t.integer :A_options, array: true, default: []
Run Code Online (Sandbox Code Playgroud)
这应该是NoMethodError:
t.array :A_options
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 中没有“数组”类型,只有“X 数组”,其中“X”是其他列类型。PostgreSQL 数组不是像 Ruby 数组那样的通用容器,它们更像是 C、C++、Go 等中的数组。
如果您需要一个更像 Ruby 数组的通用容器,那么也许您需要jsonb。数组jsonb可以同时保存数字、字符串、布尔值、数组、哈希值等的集合。
就生成器而言,您无法指定default: [],因为您根本无法指定default:
3.5 列修饰符
[...]
null并且default不能通过命令行指定。
| 归档时间: |
|
| 查看次数: |
5191 次 |
| 最近记录: |