Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
d075c843
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 搜索 >>
提交
d075c843
编写于
5月 26, 2014
作者:
Y
Yves Senn
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #15307 from sgrif/sg-type-cast-for-write
Add an interface for type objects to control Ruby => SQL
上级
7a2b37fb
b5c4ef2c
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
19 addition
and
10 deletion
+19
-10
activerecord/lib/active_record/attribute_methods/serialization.rb
...cord/lib/active_record/attribute_methods/serialization.rb
+2
-4
activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
...b/active_record/attribute_methods/time_zone_conversion.rb
+2
-4
activerecord/lib/active_record/connection_adapters/abstract/quoting.rb
...lib/active_record/connection_adapters/abstract/quoting.rb
+9
-0
activerecord/lib/active_record/connection_adapters/column.rb
activerecord/lib/active_record/connection_adapters/column.rb
+2
-1
activerecord/lib/active_record/connection_adapters/type/value.rb
...ecord/lib/active_record/connection_adapters/type/value.rb
+4
-0
activerecord/test/cases/adapters/postgresql/composite_test.rb
...verecord/test/cases/adapters/postgresql/composite_test.rb
+0
-1
未找到文件。
activerecord/lib/active_record/attribute_methods/serialization.rb
浏览文件 @
d075c843
...
@@ -65,6 +65,8 @@ def serialize(attr_name, class_name_or_coder = Object)
...
@@ -65,6 +65,8 @@ def serialize(attr_name, class_name_or_coder = Object)
end
end
class
Type
# :nodoc:
class
Type
# :nodoc:
delegate
:type
,
:type_cast_for_database
,
to: :@column
def
initialize
(
column
)
def
initialize
(
column
)
@column
=
column
@column
=
column
end
end
...
@@ -77,10 +79,6 @@ def type_cast(value)
...
@@ -77,10 +79,6 @@ def type_cast(value)
end
end
end
end
def
type
@column
.
type
end
def
accessor
def
accessor
ActiveRecord
::
Store
::
IndifferentHashAccessor
ActiveRecord
::
Store
::
IndifferentHashAccessor
end
end
...
...
activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
浏览文件 @
d075c843
...
@@ -2,6 +2,8 @@ module ActiveRecord
...
@@ -2,6 +2,8 @@ module ActiveRecord
module
AttributeMethods
module
AttributeMethods
module
TimeZoneConversion
module
TimeZoneConversion
class
Type
# :nodoc:
class
Type
# :nodoc:
delegate
:type
,
:type_cast_for_database
,
to: :@column
def
initialize
(
column
)
def
initialize
(
column
)
@column
=
column
@column
=
column
end
end
...
@@ -10,10 +12,6 @@ def type_cast(value)
...
@@ -10,10 +12,6 @@ def type_cast(value)
value
=
@column
.
type_cast
(
value
)
value
=
@column
.
type_cast
(
value
)
value
.
acts_like?
(
:time
)
?
value
.
in_time_zone
:
value
value
.
acts_like?
(
:time
)
?
value
.
in_time_zone
:
value
end
end
def
type
@column
.
type
end
end
end
extend
ActiveSupport
::
Concern
extend
ActiveSupport
::
Concern
...
...
activerecord/lib/active_record/connection_adapters/abstract/quoting.rb
浏览文件 @
d075c843
...
@@ -47,6 +47,15 @@ def type_cast(value, column)
...
@@ -47,6 +47,15 @@ def type_cast(value, column)
return
value
.
id
return
value
.
id
end
end
# FIXME: The only case we get an object other than nil or a real column
# is `SchemaStatements#add_column` with a PG array that has a non-empty default
# value. Is this really the only case? Are we missing tests for other types?
# We should have a real column object passed (or nil) here, and check for that
# instead
if
column
.
respond_to?
(
:type_cast_for_database
)
value
=
column
.
type_cast_for_database
(
value
)
end
case
value
case
value
when
String
,
ActiveSupport
::
Multibyte
::
Chars
when
String
,
ActiveSupport
::
Multibyte
::
Chars
value
=
value
.
to_s
value
=
value
.
to_s
...
...
activerecord/lib/active_record/connection_adapters/column.rb
浏览文件 @
d075c843
...
@@ -18,7 +18,8 @@ module Format
...
@@ -18,7 +18,8 @@ module Format
alias
:encoded?
:coder
alias
:encoded?
:coder
delegate
:type
,
:precision
,
:scale
,
:limit
,
:klass
,
:text?
,
:number?
,
:binary?
,
:type_cast_for_write
,
to: :cast_type
delegate
:type
,
:precision
,
:scale
,
:limit
,
:klass
,
:text?
,
:number?
,
:binary?
,
:type_cast_for_write
,
:type_cast_for_database
,
to: :cast_type
# Instantiates a new column in the table.
# Instantiates a new column in the table.
#
#
...
...
activerecord/lib/active_record/connection_adapters/type/value.rb
浏览文件 @
d075c843
...
@@ -21,6 +21,10 @@ def type_cast_for_write(value)
...
@@ -21,6 +21,10 @@ def type_cast_for_write(value)
value
value
end
end
def
type_cast_for_database
(
value
)
type_cast_for_write
(
value
)
end
def
text?
def
text?
false
false
end
end
...
...
activerecord/test/cases/adapters/postgresql/composite_test.rb
浏览文件 @
d075c843
...
@@ -122,7 +122,6 @@ def test_composite_mapping
...
@@ -122,7 +122,6 @@ def test_composite_mapping
assert_equal
"Champs-Élysées"
,
composite
.
address
.
street
assert_equal
"Champs-Élysées"
,
composite
.
address
.
street
composite
.
address
=
FullAddress
.
new
(
"Paris"
,
"Rue Basse"
)
composite
.
address
=
FullAddress
.
new
(
"Paris"
,
"Rue Basse"
)
skip
"Saving with custom OID type is currently not supported."
composite
.
save!
composite
.
save!
assert_equal
'Paris'
,
composite
.
reload
.
address
.
city
assert_equal
'Paris'
,
composite
.
reload
.
address
.
city
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录