Ruby:你如何拥有可选的第一个参数?但默认尾随参数?

时间:2011-07-25 19:17:40

标签: ruby

我想要一个与此类似的方法:

def method_with_optional(..., user = current_user, account = current_account)
...

因为,我不想每次都传递current_user和current_account。 但只要未传递用户对象,就不应覆盖用户形式参数。

这样我就可以做到以下

method_with_optional(params[:id])

 method_with_optional(params[:id], User.new)

3 个答案:

答案 0 :(得分:1)

您正在寻找的是命名参数,Ruby 1.8不支持这些参数,但arguments可能会取得一些成功。

答案 1 :(得分:0)

很抱歉,目前没有对命名参数的内置支持,你必须等待Ruby 2.0。

答案 2 :(得分:0)

默认参数的替代方法是在方法体中分配变量,并将用户,帐户参数作为params哈希的一部分提供。您可以检查params是否包含用户和/或帐户,然后执行必要的操作:

user = params[:user] || current_user
account = params[:account] || account

编辑:如果在调用方法之前无法向Params哈希添加内容,那么除了在方法签名中重新排序形式参数之外,我不知道你能做什么:)