Rails / Ruby send方法无法用params构建路径?

时间:2014-04-01 05:23:03

标签: ruby-on-rails ruby nomethoderror

所以我在使用内部使用的宝石时发现了这种奇怪的异常现象。

我们有这种私人方法

private
def redirect_to_element(element, next_upload)
  send("scorecard_#{element.base_class_name.underscore}_path", current_scorecard, current_tab(element, next_upload))
end

这只是根据传递给它的元素动态构建路径。我想做的是让那些动态路径通过一些参数。但是我得到了这个错误

undefined method `scorecard_enterprise_development_path(ignore_tracking: true)' for #<#<Class:0x007ff767a702e0>:0x007ff767899a20>

所以在控制台中我尝试了几件事,这就是我找到的。

>> scorecard_enterprise_development_path
=> "/scorecards/338/enterprise_development"

>> send('scorecard_enterprise_development_path')
=> "/scorecards/338/enterprise_development"

>> scorecard_enterprise_development_path(ignore_tracking: true)
=> "/scorecards/338/enterprise_development?ignore_tracking=true"

>> send('scorecard_enterprise_development_path(ignore_tracking: true)')
!! #<NoMethodError: undefined method `scorecard_enterprise_development_path(ignore_tracking: true)' for #<#<Class:0x007ff767a702e0>:0x007ff767899a20>>

使用send方法构建带有params的路径将失败。任何人都可以解释为什么会这样吗?

我正在使用,ruby -v 1.9.3p327和rails -v 3.2.16

1 个答案:

答案 0 :(得分:2)

#send将调用第一个参数标识的方法,并将指定的任何参数传递给它。

所以你应该这样使用这个方法:

send('scorecard_enterprise_development_path', ignore_tracking: true)

请参阅send documentation