Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
df1a5e49
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,发现更多精彩内容 >>
提交
df1a5e49
编写于
8月 21, 2012
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5210 from Pliny/masteri
Fix for #5200
上级
684a0404
ff0d9b93
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
36 addition
and
2 deletion
+36
-2
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+6
-0
activerecord/lib/active_record/counter_cache.rb
activerecord/lib/active_record/counter_cache.rb
+1
-1
activerecord/test/cases/counter_cache_test.rb
activerecord/test/cases/counter_cache_test.rb
+10
-1
activerecord/test/fixtures/friendships.yml
activerecord/test/fixtures/friendships.yml
+4
-0
activerecord/test/fixtures/people.yml
activerecord/test/fixtures/people.yml
+3
-0
activerecord/test/models/friendship.rb
activerecord/test/models/friendship.rb
+4
-0
activerecord/test/models/person.rb
activerecord/test/models/person.rb
+2
-0
activerecord/test/schema/schema.rb
activerecord/test/schema/schema.rb
+6
-0
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
df1a5e49
## Rails 4.0.0 (unreleased) ##
*
Fix
`reset_counters`
when there are multiple
`belongs_to`
association with the
same foreign key and one of them have a counter cache.
Fixes #5200.
*Dave Desrochers*
*
`serialized_attributes`
and
`_attr_readonly`
become class method only. Instance reader methods are deprecated.
*kennyj*
...
...
activerecord/lib/active_record/counter_cache.rb
浏览文件 @
df1a5e49
...
...
@@ -25,7 +25,7 @@ def reset_counters(id, *counters)
foreign_key
=
has_many_association
.
foreign_key
.
to_s
child_class
=
has_many_association
.
klass
belongs_to
=
child_class
.
reflect_on_all_associations
(
:belongs_to
)
reflection
=
belongs_to
.
find
{
|
e
|
e
.
foreign_key
.
to_s
==
foreign_key
}
reflection
=
belongs_to
.
find
{
|
e
|
e
.
foreign_key
.
to_s
==
foreign_key
&&
e
.
options
[
:counter_cache
].
present?
}
counter_name
=
reflection
.
counter_cache_column
stmt
=
unscoped
.
where
(
arel_table
[
primary_key
].
eq
(
object
.
id
)).
arel
.
compile_update
({
...
...
activerecord/test/cases/counter_cache_test.rb
浏览文件 @
df1a5e49
...
...
@@ -8,9 +8,11 @@
require
'models/categorization'
require
'models/dog'
require
'models/dog_lover'
require
'models/person'
require
'models/friendship'
class
CounterCacheTest
<
ActiveRecord
::
TestCase
fixtures
:topics
,
:categories
,
:categorizations
,
:cars
,
:dogs
,
:dog_lovers
fixtures
:topics
,
:categories
,
:categorizations
,
:cars
,
:dogs
,
:dog_lovers
,
:people
,
:friendships
class
::
SpecialTopic
<
::
Topic
has_many
:special_replies
,
:foreign_key
=>
'parent_id'
...
...
@@ -109,4 +111,11 @@ class ::SpecialReply < ::Reply
Topic
.
update_counters
([
t1
.
id
,
t2
.
id
],
:replies_count
=>
2
)
end
end
test
"reset the right counter if two have the same foreign key"
do
michael
=
people
(
:michael
)
assert_nothing_raised
(
ActiveRecord
::
StatementInvalid
)
do
Person
.
reset_counters
(
michael
.
id
,
:followers
)
end
end
end
activerecord/test/fixtures/friendships.yml
0 → 100644
浏览文件 @
df1a5e49
Connection 1
:
id
:
1
person_id
:
1
friend_id
:
2
\ No newline at end of file
activerecord/test/fixtures/people.yml
浏览文件 @
df1a5e49
...
...
@@ -4,15 +4,18 @@ michael:
primary_contact_id
:
2
number1_fan_id
:
3
gender
:
M
followers_count
:
1
david
:
id
:
2
first_name
:
David
primary_contact_id
:
3
number1_fan_id
:
1
gender
:
M
followers_count
:
1
susan
:
id
:
3
first_name
:
Susan
primary_contact_id
:
2
number1_fan_id
:
1
gender
:
F
followers_count
:
1
activerecord/test/models/friendship.rb
0 → 100644
浏览文件 @
df1a5e49
class
Friendship
<
ActiveRecord
::
Base
belongs_to
:friend
,
class_name:
'Person'
belongs_to
:follower
,
foreign_key:
'friend_id'
,
class_name:
'Person'
,
counter_cache: :followers_count
end
activerecord/test/models/person.rb
浏览文件 @
df1a5e49
...
...
@@ -8,6 +8,8 @@ class Person < ActiveRecord::Base
has_many
:posts_with_no_comments
,
->
{
includes
(
:comments
).
where
(
'comments.id is null'
).
references
(
:comments
)
},
:through
=>
:readers
,
:source
=>
:post
has_many
:followers
,
foreign_key:
'friend_id'
,
class_name:
'Friendship'
has_many
:references
has_many
:bad_references
has_many
:fixed_bad_references
,
->
{
where
:favourite
=>
true
},
:class_name
=>
'BadReference'
...
...
activerecord/test/schema/schema.rb
浏览文件 @
df1a5e49
...
...
@@ -270,6 +270,11 @@ def create_table(*args, &block)
t
.
string
:name
end
create_table
:friendships
,
:force
=>
true
do
|
t
|
t
.
integer
:friend_id
t
.
integer
:person_id
end
create_table
:goofy_string_id
,
:force
=>
true
,
:id
=>
false
do
|
t
|
t
.
string
:id
,
:null
=>
false
t
.
string
:info
...
...
@@ -476,6 +481,7 @@ def create_table(*args, &block)
t
.
references
:number1_fan
t
.
integer
:lock_version
,
:null
=>
false
,
:default
=>
0
t
.
string
:comments
t
.
integer
:followers_count
,
:default
=>
0
t
.
references
:best_friend
t
.
references
:best_friend_of
t
.
timestamps
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录