所以我在使用内部使用的宝石时发现了这种奇怪的异常现象。
我们有这种私人方法
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
答案 0 :(得分:2)
#send
将调用第一个参数标识的方法,并将指定的任何参数传递给它。
所以你应该这样使用这个方法:
send('scorecard_enterprise_development_path', ignore_tracking: true)