Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
7fa9cb58
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,发现更多精彩内容 >>
提交
7fa9cb58
编写于
7月 13, 2012
作者:
J
Jon Leighton
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix association :extend option
上级
8baaa452
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
26 addition
and
16 deletion
+26
-16
activerecord/lib/active_record/associations/association_scope.rb
...ecord/lib/active_record/associations/association_scope.rb
+2
-6
activerecord/lib/active_record/associations/builder/association.rb
...ord/lib/active_record/associations/builder/association.rb
+5
-0
activerecord/lib/active_record/associations/builder/collection_association.rb
...ive_record/associations/builder/collection_association.rb
+12
-6
activerecord/lib/active_record/relation/query_methods.rb
activerecord/lib/active_record/relation/query_methods.rb
+1
-1
activerecord/test/cases/associations/extension_test.rb
activerecord/test/cases/associations/extension_test.rb
+1
-1
activerecord/test/cases/relation_test.rb
activerecord/test/cases/relation_test.rb
+5
-2
未找到文件。
activerecord/lib/active_record/associations/association_scope.rb
浏览文件 @
7fa9cb58
...
...
@@ -15,9 +15,7 @@ def initialize(association)
def
scope
scope
=
klass
.
unscoped
scope
.
extending!
(
*
Array
(
options
[
:extend
]))
scope
.
merge!
eval_scope
(
klass
,
reflection
.
scope
)
if
reflection
.
scope
add_constraints
(
scope
)
end
...
...
@@ -120,10 +118,8 @@ def table_name_for(reflection)
end
def
eval_scope
(
klass
,
scope
)
return
scope
if
scope
.
is_a?
(
Relation
)
if
scope
.
arity
==
0
klass
.
unscoped
.
instance_exec
(
&
scope
)
if
scope
.
is_a?
(
Relation
)
scope
else
klass
.
unscoped
.
instance_exec
(
owner
,
&
scope
)
end
...
...
activerecord/lib/active_record/associations/builder/association.rb
浏览文件 @
7fa9cb58
...
...
@@ -23,6 +23,11 @@ def initialize(model, name, scope, options)
@scope
=
nil
@options
=
scope
end
if
@scope
&&
@scope
.
arity
==
0
prev_scope
=
@scope
@scope
=
proc
{
instance_exec
(
&
prev_scope
)
}
end
end
def
mixin
...
...
activerecord/lib/active_record/associations/builder/collection_association.rb
浏览文件 @
7fa9cb58
...
...
@@ -6,7 +6,7 @@ def valid_options
super
+
[
:table_name
,
:finder_sql
,
:counter_sql
,
:before_add
,
:after_add
,
:before_remove
,
:after_remove
]
end
attr_reader
:block_extension
attr_reader
:block_extension
,
:extension_module
def
initialize
(
*
args
,
&
extension
)
super
(
*
args
)
...
...
@@ -27,18 +27,24 @@ def writable?
private
def
wrap_block_extension
options
[
:extend
]
=
Array
(
options
[
:extend
])
if
block_extension
@extension_module
=
mod
=
Module
.
new
(
&
block_extension
)
silence_warnings
do
model
.
parent
.
const_set
(
extension_module_name
,
Module
.
new
(
&
block_extension
))
model
.
parent
.
const_set
(
extension_module_name
,
mod
)
end
prev_scope
=
@scope
if
prev_scope
@scope
=
proc
{
|
owner
|
instance_exec
(
owner
,
&
prev_scope
).
extending
(
mod
)
}
else
@scope
=
proc
{
extending
(
mod
)
}
end
options
[
:extend
].
push
(
"
#{
model
.
parent
}
::
#{
extension_module_name
}
"
.
constantize
)
end
end
def
extension_module_name
@extension_module_name
||=
"
#{
model
.
to_s
.
demodulize
}#{
name
.
to_s
.
camelize
}
AssociationExtension"
@extension_module_name
||=
"
#{
model
.
name
.
demodulize
}#{
name
.
to_s
.
camelize
}
AssociationExtension"
end
def
define_callback
(
callback_name
)
...
...
activerecord/lib/active_record/relation/query_methods.rb
浏览文件 @
7fa9cb58
...
...
@@ -529,7 +529,7 @@ def extending(*modules, &block)
def
extending!
(
*
modules
,
&
block
)
modules
<<
Module
.
new
(
&
block
)
if
block_given?
self
.
extending_values
=
modules
.
flatten
self
.
extending_values
+
=
modules
.
flatten
extend
(
*
extending_values
)
if
extending_values
.
any?
self
...
...
activerecord/test/cases/associations/extension_test.rb
浏览文件 @
7fa9cb58
...
...
@@ -72,6 +72,6 @@ def test_proxy_association_after_scoped
def
extension_name
(
model
)
builder
=
ActiveRecord
::
Associations
::
Builder
::
HasMany
.
new
(
model
,
:association_name
,
nil
,
{})
{
}
builder
.
send
(
:wrap_block_extension
)
builder
.
options
[
:extend
].
first
.
name
builder
.
extension_module
.
name
end
end
activerecord/test/cases/relation_test.rb
浏览文件 @
7fa9cb58
...
...
@@ -191,11 +191,14 @@ def relation
end
test
'extending!'
do
mod
=
Module
.
new
mod
,
mod2
=
Module
.
new
,
Module
.
new
assert
relation
.
extending!
(
mod
).
equal?
(
relation
)
assert
[
mod
],
relation
.
extending_values
assert
_equal
[
mod
],
relation
.
extending_values
assert
relation
.
is_a?
(
mod
)
relation
.
extending!
(
mod2
)
assert_equal
[
mod
,
mod2
],
relation
.
extending_values
end
test
'extending! with empty args'
do
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录