vik*_*sad 3 ruby methods activerecord ruby-on-rails dynamic
在ruby web中,定义方法的参数。
def para_check(para1, para2, para3 .... )
end
Run Code Online (Sandbox Code Playgroud)
如何.where定义activerecord 以使其接受动态参数?
我虽然浏览了很少的博客/网站,但找不到有用的资源。
在Ruby中,您可以在参数前面加上splat(*)来定义接受任意数量的位置参数的方法:
def foo(*x)
x
end
foo(1,2,3) == [1,2,3] # true
Run Code Online (Sandbox Code Playgroud)
这也称为可变函数。如您所见,这将从参数列表创建一个数组。
您还可以将编号和位置参数与splat结合使用:
foo(bar, *args)
[bar, args]
end
foo(1, 'a', 'b') == [1, ['a','b']] # true
Run Code Online (Sandbox Code Playgroud)
这使得该方法需要一个参数,但允许无限数量的参数。
该ActiveRecord::QueryMethods#where方法接受位置参数和关键字参数:
where('foo = :x OR bar = :y', x: 1, x: 2)
Run Code Online (Sandbox Code Playgroud)
从Ruby 2.0开始,您可以执行以下操作:
def foo(*args, **kwargs)
[args, kwargs]
end
foo(1, 2, 3, bar: 'baz') == [[1, 2, 3], { bar: 'baz' }] ## true
Run Code Online (Sandbox Code Playgroud)
以前,您必须使用带有数组参数和可选哈希参数的各种hacky解决方案。您仍然可以在Rails源代码以及Ruby 2.0之前编写的许多其他代码中找到它们。