Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
70fa756d
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,发现更多精彩内容 >>
提交
70fa756d
编写于
9月 14, 2011
作者:
T
Thomas Hollstegge
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
AR::Base.becomes should not change the STI type
If you want to change the STI type too, use AR::Base.becomes! instead
上级
ee941283
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
31 addition
and
2 deletion
+31
-2
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+7
-0
activerecord/lib/active_record/persistence.rb
activerecord/lib/active_record/persistence.rb
+12
-1
activerecord/test/cases/persistence_test.rb
activerecord/test/cases/persistence_test.rb
+12
-1
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
70fa756d
## Rails 4.0.0 (unreleased) ##
*
Don't change STI type when calling ActiveRecord::Base#becomes, add
ActiveRecord::Base#becomes!
See #3023.
*Thomas Hollstegge*
*
`#pluck`
can be used on a relation with
`select`
clause. Fix #7551
Example:
...
...
activerecord/lib/active_record/persistence.rb
浏览文件 @
70fa756d
...
...
@@ -155,7 +155,18 @@ def becomes(klass)
became
.
instance_variable_set
(
"@new_record"
,
new_record?
)
became
.
instance_variable_set
(
"@destroyed"
,
destroyed?
)
became
.
instance_variable_set
(
"@errors"
,
errors
)
became
.
public_send
(
"
#{
klass
.
inheritance_column
}
="
,
klass
.
name
)
unless
self
.
class
.
descends_from_active_record?
became
end
# Wrapper around +becomes+ that also changes the instance's sti column value.
# This is especially useful if you want to persist the changed class in your
# database.
#
# Note: The old instance's sti column value will be changed too, as both objects
# share the same set of attributes.
def
becomes!
(
klass
)
became
=
becomes
(
klass
)
became
.
public_send
(
"
#{
klass
.
inheritance_column
}
="
,
klass
.
sti_name
)
unless
self
.
class
.
descends_from_active_record?
became
end
...
...
activerecord/test/cases/persistence_test.rb
浏览文件 @
70fa756d
...
...
@@ -280,12 +280,23 @@ def test_update_for_record_with_only_primary_key
def
test_update_sti_type
assert_instance_of
Reply
,
topics
(
:second
)
topic
=
topics
(
:second
).
becomes
(
Topic
)
topic
=
topics
(
:second
).
becomes
!
(
Topic
)
assert_instance_of
Topic
,
topic
topic
.
save!
assert_instance_of
Topic
,
Topic
.
find
(
topic
.
id
)
end
def
test_preserve_original_sti_type
reply
=
topics
(
:second
)
assert_equal
"Reply"
,
reply
.
type
topic
=
reply
.
becomes
(
Topic
)
assert_equal
"Reply"
,
reply
.
type
assert_instance_of
Topic
,
topic
assert_equal
"Reply"
,
topic
.
type
end
def
test_delete
topic
=
Topic
.
find
(
1
)
assert_equal
topic
,
topic
.
delete
,
'topic.delete did not return self'
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录