Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
aff928ba
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,发现更多精彩内容 >>
提交
aff928ba
编写于
5月 27, 2013
作者:
Y
Yves Senn
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
`implicit_readonly` is being removed in favor of calling `readonly` explicitly
上级
95ce5062
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
25 addition
and
24 deletion
+25
-24
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+12
-0
activerecord/lib/active_record/relation.rb
activerecord/lib/active_record/relation.rb
+1
-5
activerecord/lib/active_record/relation/query_methods.rb
activerecord/lib/active_record/relation/query_methods.rb
+0
-5
activerecord/test/cases/associations/inner_join_association_test.rb
...rd/test/cases/associations/inner_join_association_test.rb
+4
-4
activerecord/test/cases/readonly_test.rb
activerecord/test/cases/readonly_test.rb
+8
-10
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
aff928ba
*
Usage of
`implicit_readonly`
is being removed
`. Please use `
readonly
` method
explicitly to mark records as `
readonly.
Fixes #10615.
Example:
user = User.joins(:todos).select("users.*, todos.title as todos_title").readonly(true).first
user.todos_title = 'clean pet'
user.save! # will raise error
*Yves Senn*
*
Fix the
`:primary_key`
option for
`has_many`
associations.
Fixes #10693.
...
...
activerecord/lib/active_record/relation.rb
浏览文件 @
aff928ba
...
...
@@ -26,7 +26,6 @@ def initialize(klass, table, values = {})
@klass
=
klass
@table
=
table
@values
=
values
@implicit_readonly
=
nil
@loaded
=
false
@default_scoped
=
false
end
...
...
@@ -582,10 +581,7 @@ def exec_queries
ActiveRecord
::
Associations
::
Preloader
.
new
(
@records
,
associations
).
run
end
# @readonly_value is true only if set explicitly. @implicit_readonly is true if there
# are JOINS and no explicit SELECT.
readonly
=
readonly_value
.
nil?
?
@implicit_readonly
:
readonly_value
@records
.
each
{
|
record
|
record
.
readonly!
}
if
readonly
@records
.
each
{
|
record
|
record
.
readonly!
}
if
readonly_value
else
@records
=
default_scoped
.
to_a
end
...
...
activerecord/lib/active_record/relation/query_methods.rb
浏览文件 @
aff928ba
...
...
@@ -864,8 +864,6 @@ def custom_join_ast(table, joins)
return
[]
if
joins
.
empty?
@implicit_readonly
=
true
joins
.
map
do
|
join
|
case
join
when
Array
...
...
@@ -947,8 +945,6 @@ def build_joins(manager, joins)
join_dependency
.
graft
(
*
stashed_association_joins
)
@implicit_readonly
=
true
unless
association_joins
.
empty?
&&
stashed_association_joins
.
empty?
# FIXME: refactor this to build an AST
join_dependency
.
join_associations
.
each
do
|
association
|
association
.
join_to
(
manager
)
...
...
@@ -961,7 +957,6 @@ def build_joins(manager, joins)
def
build_select
(
arel
,
selects
)
unless
selects
.
empty?
@implicit_readonly
=
false
arel
.
project
(
*
selects
)
else
arel
.
project
(
@klass
.
arel_table
[
Arel
.
star
])
...
...
activerecord/test/cases/associations/inner_join_association_test.rb
浏览文件 @
aff928ba
...
...
@@ -46,10 +46,10 @@ def test_join_conditions_allow_nil_associations
assert_equal
2
,
authors
.
count
end
def
test_find_with_implicit_inner_joins_
honors_readonly_without_select
authors
=
Author
.
joins
(
:posts
)
.
to_a
assert
!
authors
.
empty?
,
"expected authors to be non-empty"
assert
authors
.
all?
{
|
a
|
a
.
readonly?
},
"expected all
authors to be readonly"
def
test_find_with_implicit_inner_joins_
without_select_does_not_imply_readonly
authors
=
Author
.
joins
(
:posts
)
assert
_not
authors
.
empty?
,
"expected authors to be non-empty"
assert
authors
.
none?
{
|
a
|
a
.
readonly?
},
"expected no
authors to be readonly"
end
def
test_find_with_implicit_inner_joins_honors_readonly_with_select
...
...
activerecord/test/cases/readonly_test.rb
浏览文件 @
aff928ba
require
"cases/helper"
require
'models/author'
require
'models/post'
require
'models/comment'
require
'models/developer'
...
...
@@ -7,7 +8,7 @@
require
'models/person'
class
ReadOnlyTest
<
ActiveRecord
::
TestCase
fixtures
:posts
,
:comments
,
:developers
,
:projects
,
:developers_projects
,
:people
,
:readers
fixtures
:
authors
,
:
posts
,
:comments
,
:developers
,
:projects
,
:developers_projects
,
:people
,
:readers
def
test_cant_save_readonly_record
dev
=
Developer
.
find
(
1
)
...
...
@@ -34,15 +35,12 @@ def test_find_with_readonly_option
Developer
.
readonly
.
each
{
|
d
|
assert
d
.
readonly?
}
end
def
test_find_with_joins_option_does_not_imply_readonly
Developer
.
joins
(
' '
).
each
{
|
d
|
assert_not
d
.
readonly?
}
Developer
.
joins
(
' '
).
readonly
(
true
).
each
{
|
d
|
assert
d
.
readonly?
}
def
test_find_with_joins_option_implies_readonly
# Blank joins don't count.
Developer
.
joins
(
' '
).
each
{
|
d
|
assert
!
d
.
readonly?
}
Developer
.
joins
(
' '
).
readonly
(
false
).
each
{
|
d
|
assert
!
d
.
readonly?
}
# Others do.
Developer
.
joins
(
', projects'
).
each
{
|
d
|
assert
d
.
readonly?
}
Developer
.
joins
(
', projects'
).
readonly
(
false
).
each
{
|
d
|
assert
!
d
.
readonly?
}
Developer
.
joins
(
', projects'
).
each
{
|
d
|
assert_not
d
.
readonly?
}
Developer
.
joins
(
', projects'
).
readonly
(
true
).
each
{
|
d
|
assert
d
.
readonly?
}
end
def
test_has_many_find_readonly
...
...
@@ -87,7 +85,7 @@ def test_readonly_scoping
# conflicting column names
unless
current_adapter?
(
:OracleAdapter
)
Post
.
joins
(
', developers'
).
scoping
do
assert
Post
.
find
(
1
).
readonly?
assert
_not
Post
.
find
(
1
).
readonly?
assert
Post
.
readonly
.
find
(
1
).
readonly?
assert
!
Post
.
readonly
(
false
).
find
(
1
).
readonly?
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录