ruby-on-rails - rails activerecord where 子句如何接受动态参数?
问题描述
在 ruby web 中为方法定义参数。
def para_check(para1, para2, para3 .... )
end
如何.where
定义 activerecord 以便它接受动态参数?
我浏览了几个博客/网站,但找不到有用的资源。
解决方案
在 Ruby 中,您可以在参数前面加上 splat ( *
) 来定义接受任意数量位置参数的方法:
def foo(*x)
x
end
foo(1,2,3) == [1,2,3] # true
这也称为可变参数函数。如您所见,这会从参数列表中创建一个数组。
您还可以结合编号和位置参数和 splat:
foo(bar, *args)
[bar, args]
end
foo(1, 'a', 'b') == [1, ['a','b']] # true
这使得该方法需要一个参数,但允许无限数量的参数。
该ActiveRecord::QueryMethods#where
方法接受位置参数和关键字参数:
where('foo = :x OR bar = :y', x: 1, x: 2)
从 Ruby 2.0 开始,您可以这样做:
def foo(*args, **kwargs)
[args, kwargs]
end
foo(1, 2, 3, bar: 'baz') == [[1, 2, 3], { bar: 'baz' }] ## true
以前,您必须使用带有数组参数和可选哈希参数的各种 hacky 解决方案。您仍然可以在 Rails 源代码和在 Ruby 2.0 之前编写的许多其他代码中找到这些。
推荐阅读
- akka.net - 无法加入 Akka.NET 集群
- django - 如何在 DJANGO 框架中解析 csv 文件?
- java - 如何提示接口的植入有一些指定的数据成员?
- ios - 如何使用 Firebase 实现评论部分
- ssrs-2008 - SSRS 不同值的总和
- html - 有没有更有效的方法让按钮变成不同的颜色?
- android - Android Studio:小部件位置问题 - 如何根据屏幕大小调整大小?
- javascript - 在 Django 应用程序中嵌入浏览器
- php - 调用未定义的方法soapclient::GetOrdersByClientPO()?
- recursion - F# 两个递归函数定义行为的奇怪差异