Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
fdc62cdc
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,发现更多精彩内容 >>
提交
fdc62cdc
编写于
1月 01, 2010
作者:
P
Pratik Naik
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use Arel::Attribute when building where conditions from hash
上级
2f864395
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
5 deletion
+36
-5
activerecord/lib/active_record/relation/query_methods.rb
activerecord/lib/active_record/relation/query_methods.rb
+36
-5
未找到文件。
activerecord/lib/active_record/relation/query_methods.rb
浏览文件 @
fdc62cdc
...
...
@@ -104,14 +104,16 @@ def joins(join, join_type = nil)
def
where
(
*
args
)
return
spawn
if
args
.
blank?
if
[
String
,
Hash
,
Array
].
include?
(
args
.
first
.
class
)
conditions
=
@klass
.
send
(
:merge_conditions
,
args
.
size
>
1
?
Array
.
wrap
(
args
)
:
args
.
first
)
conditions
=
Arel
::
SqlLiteral
.
new
(
conditions
)
if
conditions
conditions
=
if
[
String
,
Array
].
include?
(
args
.
first
.
class
)
merged
=
@klass
.
send
(
:merge_conditions
,
args
.
size
>
1
?
Array
.
wrap
(
args
)
:
args
.
first
)
Arel
::
SqlLiteral
.
new
(
merged
)
if
merged
elsif
args
.
first
.
is_a?
(
Hash
)
build_predicate_from_hash
(
args
.
first
)
else
conditions
=
args
.
first
args
.
first
end
spawn
(
@relation
.
where
(
conditions
))
spawn
(
@relation
.
where
(
*
conditions
))
end
private
...
...
@@ -128,5 +130,34 @@ def reverse_sql_order(order_query)
}.
join
(
','
)
end
def
build_predicate_from_hash
(
attributes
,
default_table
=
self
.
table
)
attributes
=
@klass
.
send
(
:expand_hash_conditions_for_aggregates
,
attributes
)
predicates
=
attributes
.
map
do
|
column
,
value
|
arel_table
=
default_table
if
value
.
is_a?
(
Hash
)
arel_table
=
Arel
::
Table
.
new
(
column
,
Arel
::
Sql
::
Engine
.
new
(
@klass
))
build_predicate_from_hash
(
value
,
arel_table
)
else
column
=
column
.
to_s
if
column
.
include?
(
'.'
)
table_name
,
column
=
column
.
split
(
'.'
,
2
)
arel_table
=
Arel
::
Table
.
new
(
table_name
,
Arel
::
Sql
::
Engine
.
new
(
@klass
))
end
case
value
when
Array
,
Range
,
ActiveRecord
::
Associations
::
AssociationCollection
,
ActiveRecord
::
NamedScope
::
Scope
arel_table
[
column
].
in
(
value
)
else
arel_table
[
column
].
eq
(
value
)
end
end
end
predicates
.
flatten
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录