Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
020abadf
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 搜索 >>
提交
020abadf
编写于
7月 18, 2017
作者:
S
Sean Griffin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove deprecated code concerning dirty methods in after callbacks
上级
26feaf9c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
11 addition
and
83 deletion
+11
-83
activerecord/lib/active_record/attribute_methods/dirty.rb
activerecord/lib/active_record/attribute_methods/dirty.rb
+8
-79
activerecord/test/cases/dirty_test.rb
activerecord/test/cases/dirty_test.rb
+3
-4
未找到文件。
activerecord/lib/active_record/attribute_methods/dirty.rb
浏览文件 @
020abadf
...
...
@@ -17,8 +17,8 @@ module Dirty # :nodoc:
class_attribute
:partial_writes
,
instance_writer:
false
,
default:
true
after_create
{
changes_
internally_
applied
}
after_update
{
changes_
internally_
applied
}
after_create
{
changes_applied
}
after_update
{
changes_applied
}
# Attribute methods for "changed in last call to save?"
attribute_method_affix
(
prefix:
"saved_change_to_"
,
suffix:
"?"
)
...
...
@@ -30,25 +30,10 @@ module Dirty # :nodoc:
attribute_method_suffix
(
"_change_to_be_saved"
,
"_in_database"
)
end
# Attempts to +save+ the record and clears changed attributes if successful.
def
save
(
*
)
if
status
=
super
changes_applied
end
status
end
# Attempts to <tt>save!</tt> the record and clears changed attributes if successful.
def
save!
(
*
)
super
.
tap
do
changes_applied
end
end
# <tt>reload</tt> the record and clears changed attributes.
def
reload
(
*
)
super
.
tap
do
@
previous_mutation_tracker
=
nil
@
mutations_before_last_save
=
nil
clear_mutation_trackers
@changed_attributes
=
ActiveSupport
::
HashWithIndifferentAccess
.
new
end
...
...
@@ -62,20 +47,16 @@ def initialize_dup(other) # :nodoc:
clear_mutation_trackers
end
def
changes_
internally_applied
# :nodoc:
def
changes_
applied
@mutations_before_last_save
=
mutation_tracker
forget_attribute_assignments
@mutations_from_database
=
AttributeMutationTracker
.
new
(
@attributes
)
end
def
changes_applied
@previous_mutation_tracker
=
mutation_tracker
@changed_attributes
=
ActiveSupport
::
HashWithIndifferentAccess
.
new
forget_attribute_assignments
clear_mutation_trackers
end
def
clear_changes_information
@
previous_mutation_tracker
=
nil
@
mutations_before_last_save
=
nil
@changed_attributes
=
ActiveSupport
::
HashWithIndifferentAccess
.
new
forget_attribute_assignments
clear_mutation_trackers
...
...
@@ -100,28 +81,18 @@ def changed_attributes
if
defined?
(
@cached_changed_attributes
)
@cached_changed_attributes
else
emit_warning_if_needed
(
"changed_attributes"
,
"saved_changes.transform_values(&:first)"
)
super
.
reverse_merge
(
mutation_tracker
.
changed_values
).
freeze
end
end
def
changes
cache_changed_attributes
do
emit_warning_if_needed
(
"changes"
,
"saved_changes"
)
super
end
end
def
previous_changes
unless
previous_mutation_tracker
.
equal?
(
mutations_before_last_save
)
ActiveSupport
::
Deprecation
.
warn
(
<<-
EOW
.
strip_heredoc
)
The behavior of `previous_changes` inside of after callbacks is
deprecated without replacement. In the next release of Rails,
this method inside of `after_save` will return the changes that
were just saved.
EOW
end
previous_mutation_tracker
.
changes
mutations_before_last_save
.
changes
end
def
attribute_changed_in_place?
(
attr_name
)
...
...
@@ -211,31 +182,6 @@ def attributes_in_database
changes_to_save
.
transform_values
(
&
:first
)
end
def
attribute_was
(
*
)
emit_warning_if_needed
(
"attribute_was"
,
"attribute_before_last_save"
)
super
end
def
attribute_change
(
*
)
emit_warning_if_needed
(
"attribute_change"
,
"saved_change_to_attribute"
)
super
end
def
attribute_changed?
(
*
)
emit_warning_if_needed
(
"attribute_changed?"
,
"saved_change_to_attribute?"
)
super
end
def
changed?
(
*
)
emit_warning_if_needed
(
"changed?"
,
"saved_changes?"
)
super
end
def
changed
(
*
)
emit_warning_if_needed
(
"changed"
,
"saved_changes.keys"
)
super
end
private
def
mutation_tracker
...
...
@@ -245,18 +191,6 @@ def mutation_tracker
@mutation_tracker
||=
AttributeMutationTracker
.
new
(
@attributes
)
end
def
emit_warning_if_needed
(
method_name
,
new_method_name
)
unless
mutation_tracker
.
equal?
(
mutations_from_database
)
ActiveSupport
::
Deprecation
.
warn
(
<<-
EOW
.
squish
)
The behavior of `
#{
method_name
}
` inside of after callbacks will
be changing in the next version of Rails. The new return value will reflect the
behavior of calling the method after `save` returned (e.g. the opposite of what
it returns now). To maintain the current behavior, use `
#{
new_method_name
}
`
instead.
EOW
end
end
def
mutations_from_database
unless
defined?
(
@mutations_from_database
)
@mutations_from_database
=
nil
...
...
@@ -307,15 +241,10 @@ def forget_attribute_assignments
def
clear_mutation_trackers
@mutation_tracker
=
nil
@mutations_from_database
=
nil
@mutations_before_last_save
=
nil
end
def
previous_mutation_tracker
@previous_mutation_tracker
||=
NullMutationTracker
.
instance
end
def
mutations_before_last_save
@mutations_before_last_save
||=
previous_mutation_tracker
@mutations_before_last_save
||=
NullMutationTracker
.
instance
end
def
cache_changed_attributes
...
...
activerecord/test/cases/dirty_test.rb
浏览文件 @
020abadf
...
...
@@ -839,15 +839,14 @@ def catchphrase
assert_equal
%w(first_name lock_version updated_at)
.
sort
,
person
.
saved_changes
.
keys
.
sort
end
test
"changed? in after callbacks returns
true but is deprecated
"
do
test
"changed? in after callbacks returns
false
"
do
klass
=
Class
.
new
(
ActiveRecord
::
Base
)
do
self
.
table_name
=
"people"
after_save
do
ActiveSupport
::
Deprecation
.
silence
do
raise
"changed? should be true"
unless
changed?
end
raise
"changed? should be false"
if
changed?
raise
"has_changes_to_save? should be false"
if
has_changes_to_save?
rause
"saved_changes? should be true"
unless
saved_changes?
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录