Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
09ac1776
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
09ac1776
编写于
5月 01, 2013
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #10404 from chadmoone/fix-pg-uuid-default
Allow override of PostgreSQL UUID primary key default
上级
d1f857e7
55c40c0e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
61 addition
and
1 deletion
+61
-1
activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
...b/active_record/connection_adapters/postgresql_adapter.rb
+30
-1
activerecord/test/cases/adapters/postgresql/uuid_test.rb
activerecord/test/cases/adapters/postgresql/uuid_test.rb
+31
-0
未找到文件。
activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
浏览文件 @
09ac1776
...
...
@@ -330,9 +330,38 @@ def json(name, options = {})
class
TableDefinition
<
ActiveRecord
::
ConnectionAdapters
::
TableDefinition
include
ColumnMethods
# Defines the primary key field.
# Use of the native PostgreSQL UUID type is supported, and can be used
# by defining your tables as such:
#
# create_table :stuffs, id: :uuid do |t|
# t.string :content
# t.timestamps
# end
#
# By default, this will use the +uuid_generate_v4()+ function from the
# +uuid-ossp+ extension, which MUST be enabled on your databse. To enable
# the +uuid-ossp+ extension, you can use the +enable_extension+ method in your
# migrations To use a UUID primary key without +uuid-ossp+ enabled, you can
# set the +:default+ option to nil:
#
# create_table :stuffs, id: false do |t|
# t.primary_key :id, :uuid, default: nil
# t.uuid :foo_id
# t.timestamps
# end
#
# You may also pass a different UUID generation function from +uuid-ossp+
# or another library.
#
# Note that setting the UUID primary key default value to +nil+
# will require you to assure that you always provide a UUID value
# before saving a record (as primary keys cannot be nil). This might be
# done via the SecureRandom.uuid method and a +before_save+ callback,
# for instance.
def
primary_key
(
name
,
type
=
:primary_key
,
options
=
{})
return
super
unless
type
==
:uuid
options
[
:default
]
||=
'uuid_generate_v4()'
options
[
:default
]
=
options
.
fetch
(
:default
,
'uuid_generate_v4()'
)
options
[
:primary_key
]
=
true
column
name
,
type
,
options
end
...
...
activerecord/test/cases/adapters/postgresql/uuid_test.rb
浏览文件 @
09ac1776
...
...
@@ -51,3 +51,34 @@ def test_auto_create_uuid
assert_not_nil
u
.
other_uuid
end
end
class
PostgresqlUUIDTestNilDefault
<
ActiveRecord
::
TestCase
class
UUID
<
ActiveRecord
::
Base
self
.
table_name
=
'pg_uuids'
end
def
setup
@connection
=
ActiveRecord
::
Base
.
connection
@connection
.
reconnect!
@connection
.
transaction
do
@connection
.
create_table
(
'pg_uuids'
,
id:
false
)
do
|
t
|
t
.
primary_key
:id
,
:uuid
,
default:
nil
t
.
string
'name'
end
end
end
def
teardown
@connection
.
execute
'drop table if exists pg_uuids'
end
def
test_id_allows_default_override_via_nil
col_desc
=
@connection
.
execute
(
"SELECT pg_get_expr(d.adbin, d.adrelid) as default
FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attname='id' AND a.attrelid = 'pg_uuids'::regclass"
).
first
assert_nil
col_desc
[
"default"
]
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录