Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
fad166c1
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,发现更多精彩内容 >>
提交
fad166c1
编写于
6月 29, 2010
作者:
A
Aaron Patterson
提交者:
Jeremy Kemper
6月 29, 2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
AssociationCollection#create_by_*, find_or_create_by_* work properly now. [#1108 state:resolved]
Signed-off-by:
N
Jeremy Kemper
<
jeremy@bitsweat.net
>
上级
78e4d88c
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
74 addition
and
0 deletion
+74
-0
activerecord/lib/active_record/associations/association_collection.rb
.../lib/active_record/associations/association_collection.rb
+11
-0
activerecord/test/cases/associations/has_many_associations_test.rb
...ord/test/cases/associations/has_many_associations_test.rb
+62
-0
activerecord/test/schema/schema.rb
activerecord/test/schema/schema.rb
+1
-0
未找到文件。
activerecord/lib/active_record/associations/association_collection.rb
浏览文件 @
fad166c1
...
...
@@ -368,6 +368,17 @@ def load_target
end
def
method_missing
(
method
,
*
args
)
case
method
.
to_s
when
'find_or_create'
return
find
(
:first
,
:conditions
=>
args
.
first
)
||
create
(
args
.
first
)
when
/^find_or_create_by_(.*)$/
rest
=
$1
return
send
(
"find_by_
#{
rest
}
"
,
*
args
)
||
method_missing
(
"create_by_
#{
rest
}
"
,
*
args
)
when
/^create_by_(.*)$/
return
create
Hash
[
$1
.
split
(
'_and_'
).
zip
(
args
)]
end
if
@target
.
respond_to?
(
method
)
||
(
!
@reflection
.
klass
.
respond_to?
(
method
)
&&
Class
.
respond_to?
(
method
))
if
block_given?
super
{
|*
block_args
|
yield
(
*
block_args
)
}
...
...
activerecord/test/cases/associations/has_many_associations_test.rb
浏览文件 @
fad166c1
...
...
@@ -21,6 +21,68 @@ def setup
Client
.
destroyed_client_ids
.
clear
end
def
test_create_by
person
=
Person
.
create!
:first_name
=>
'tenderlove'
post
=
Post
.
find
:first
assert_equal
[],
person
.
readers
assert_nil
person
.
readers
.
find_by_post_id
post
.
id
reader
=
person
.
readers
.
create_by_post_id
post
.
id
assert_equal
1
,
person
.
readers
.
count
assert_equal
1
,
person
.
readers
.
length
assert_equal
post
,
person
.
readers
.
first
.
post
assert_equal
person
,
person
.
readers
.
first
.
person
end
def
test_create_by_multi
person
=
Person
.
create!
:first_name
=>
'tenderlove'
post
=
Post
.
find
:first
assert_equal
[],
person
.
readers
reader
=
person
.
readers
.
create_by_post_id_and_skimmer
post
.
id
,
false
assert_equal
1
,
person
.
readers
.
count
assert_equal
1
,
person
.
readers
.
length
assert_equal
post
,
person
.
readers
.
first
.
post
assert_equal
person
,
person
.
readers
.
first
.
person
end
def
test_find_or_create_by
person
=
Person
.
create!
:first_name
=>
'tenderlove'
post
=
Post
.
find
:first
assert_equal
[],
person
.
readers
assert_nil
person
.
readers
.
find_by_post_id
post
.
id
reader
=
person
.
readers
.
find_or_create_by_post_id
post
.
id
assert_equal
1
,
person
.
readers
.
count
assert_equal
1
,
person
.
readers
.
length
assert_equal
post
,
person
.
readers
.
first
.
post
assert_equal
person
,
person
.
readers
.
first
.
person
end
def
test_find_or_create
person
=
Person
.
create!
:first_name
=>
'tenderlove'
post
=
Post
.
find
:first
assert_equal
[],
person
.
readers
assert_nil
person
.
readers
.
find
(
:first
,
:conditions
=>
{
:post_id
=>
post
.
id
})
reader
=
person
.
readers
.
find_or_create
:post_id
=>
post
.
id
assert_equal
1
,
person
.
readers
.
count
assert_equal
1
,
person
.
readers
.
length
assert_equal
post
,
person
.
readers
.
first
.
post
assert_equal
person
,
person
.
readers
.
first
.
person
end
def
force_signal37_to_load_all_clients_of_firm
companies
(
:first_firm
).
clients_of_firm
.
each
{
|
f
|
}
end
...
...
activerecord/test/schema/schema.rb
浏览文件 @
fad166c1
...
...
@@ -400,6 +400,7 @@ def create_table(*args, &block)
create_table
:readers
,
:force
=>
true
do
|
t
|
t
.
integer
:post_id
,
:null
=>
false
t
.
integer
:person_id
,
:null
=>
false
t
.
boolean
:skimmer
,
:default
=>
false
end
create_table
:shape_expressions
,
:force
=>
true
do
|
t
|
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录