Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
ec13305b
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,发现更多精彩内容 >>
提交
ec13305b
编写于
12月 24, 2010
作者:
A
Aaron Patterson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
stop redifining methods on every call to set_primary_key
上级
23b03bab
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
23 addition
and
8 deletion
+23
-8
activerecord/lib/active_record/attribute_methods/primary_key.rb
...record/lib/active_record/attribute_methods/primary_key.rb
+11
-4
activerecord/test/cases/base_test.rb
activerecord/test/cases/base_test.rb
+8
-4
activerecord/test/cases/inheritance_test.rb
activerecord/test/cases/inheritance_test.rb
+4
-0
未找到文件。
activerecord/lib/active_record/attribute_methods/primary_key.rb
浏览文件 @
ec13305b
...
@@ -14,11 +14,13 @@ module ClassMethods
...
@@ -14,11 +14,13 @@ module ClassMethods
# Defines the primary key field -- can be overridden in subclasses. Overwriting will negate any effect of the
# Defines the primary key field -- can be overridden in subclasses. Overwriting will negate any effect of the
# primary_key_prefix_type setting, though.
# primary_key_prefix_type setting, though.
def
primary_key
def
primary_key
reset_primary_key
@primary_key
||=
reset_primary_key
end
end
def
reset_primary_key
#:nodoc:
def
reset_primary_key
#:nodoc:
key
=
get_primary_key
(
base_class
.
name
)
key
=
self
==
base_class
?
get_primary_key
(
base_class
.
name
)
:
base_class
.
primary_key
set_primary_key
(
key
)
set_primary_key
(
key
)
key
key
end
end
...
@@ -40,6 +42,9 @@ def get_primary_key(base_name) #:nodoc:
...
@@ -40,6 +42,9 @@ def get_primary_key(base_name) #:nodoc:
end
end
end
end
attr_accessor
:original_primary_key
attr_writer
:primary_key
# Sets the name of the primary key column to use to the given value,
# Sets the name of the primary key column to use to the given value,
# or (if the value is nil or false) to the value returned by the given
# or (if the value is nil or false) to the value returned by the given
# block.
# block.
...
@@ -48,9 +53,11 @@ def get_primary_key(base_name) #:nodoc:
...
@@ -48,9 +53,11 @@ def get_primary_key(base_name) #:nodoc:
# set_primary_key "sysid"
# set_primary_key "sysid"
# end
# end
def
set_primary_key
(
value
=
nil
,
&
block
)
def
set_primary_key
(
value
=
nil
,
&
block
)
define_attr_method
:primary_key
,
value
,
&
block
@primary_key
||=
''
self
.
original_primary_key
=
@primary_key
value
&&=
value
.
to_s
self
.
primary_key
=
block_given?
?
instance_eval
(
&
block
)
:
value
end
end
alias
:primary_key
=
:set_primary_key
end
end
end
end
end
end
...
...
activerecord/test/cases/base_test.rb
浏览文件 @
ec13305b
...
@@ -1073,10 +1073,14 @@ def test_define_attr_method_with_value
...
@@ -1073,10 +1073,14 @@ def test_define_attr_method_with_value
end
end
def
test_define_attr_method_with_block
def
test_define_attr_method_with_block
k
=
Class
.
new
(
ActiveRecord
::
Base
)
k
=
Class
.
new
(
ActiveRecord
::
Base
)
do
k
.
primary_key
=
"id"
class
<<
self
k
.
send
(
:define_attr_method
,
:primary_key
)
{
"sys_"
+
original_primary_key
}
attr_accessor
:foo_key
assert_equal
"sys_id"
,
k
.
primary_key
end
end
k
.
foo_key
=
"id"
k
.
send
(
:define_attr_method
,
:foo_key
)
{
"sys_"
+
original_foo_key
}
assert_equal
"sys_id"
,
k
.
foo_key
end
end
def
test_set_table_name_with_value
def
test_set_table_name_with_value
...
...
activerecord/test/cases/inheritance_test.rb
浏览文件 @
ec13305b
...
@@ -219,6 +219,10 @@ def test_alt_eager_loading
...
@@ -219,6 +219,10 @@ def test_alt_eager_loading
switch_to_default_inheritance_column
switch_to_default_inheritance_column
end
end
def
test_inherits_custom_primary_key
assert_equal
Subscriber
.
primary_key
,
SpecialSubscriber
.
primary_key
end
def
test_inheritance_without_mapping
def
test_inheritance_without_mapping
assert_kind_of
SpecialSubscriber
,
SpecialSubscriber
.
find
(
"webster132"
)
assert_kind_of
SpecialSubscriber
,
SpecialSubscriber
.
find
(
"webster132"
)
assert_nothing_raised
{
s
=
SpecialSubscriber
.
new
(
"name"
=>
"And breaaaaathe!"
);
s
.
id
=
'roger'
;
s
.
save
}
assert_nothing_raised
{
s
=
SpecialSubscriber
.
new
(
"name"
=>
"And breaaaaathe!"
);
s
.
id
=
'roger'
;
s
.
save
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录