kru*_*hah 1 ruby ruby-on-rails
if condition1
ModelName.named_scope1(parameter).named_scope2.named_scope3(parameter).named_scope4
elsif condition2
ModelName.named_scope1(parameter).named_scope2.named_scope3(parameter).named_scope5
elsif condition3
ModelName.named_scope1(parameter).named_scope2.named_scope3(parameter).named_scope6
elsif
ModelName.named_scope1(parameter).named_scope2.named_scope3(parameter).named_scope7
end
Run Code Online (Sandbox Code Playgroud)
为了解决上述问题,我写了类似这样的内容,但它引发了两个查询.
values = ModelName.named_scope1(parameter).named_scope2.named_scope3(parameter)
if condition1
values.named_scope4
elsif condition2
values.named_scope5
elsif condition3
values.named_scope6
elsif
values.named_scope7
end
Run Code Online (Sandbox Code Playgroud)
有解决方案吗
您的第一个和第二个示例完全相同,因此原始实现必须同时发送两个查询.我认为你的伪代码有点过于通用,无法进一步评论,但通常当我有if..elsif..else条件的列表(或长期的情况......就此而言)时,我会考虑是否可以使用一个查找表(只是一个哈希)而不是.但是,它可能不会直接适用于您的示例.
所以不是这样的:
case value
when "one"
obj.do_something(1, 2, 3)
when "two"
obj.do_something(4, 5, 6)
when "three"
...
end
Run Code Online (Sandbox Code Playgroud)
重新认为:
args_map = {
"one" => [1, 2, 3],
"two" => [4, 5, 6],
"three" => ...
}
obj.do_something(*args_map[value])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |