2

引号的索引路径从 var JobshopRfqx.quote_index_path 中存储和检索。以下是变量的定义方式:

JobshopRfqx.quote_index_path = 'jobshop_quotex.quotes_path(:rfq_id => r.id)'

这是有效的link_to(评估):

<%= link_to t('Quotes'), eval(JobshopRfqx.quote_index_path.to_s) %>

这是不起作用的link_to:

<%= link_to t('Quotes'), Rails.application.routes.url_helpers.send(JobshopRfqx.quote_index_path.to_s) %>

这是错误:

 ActionView::Template::Error:
       undefined method `jobshop_quotex.quotes_path(:rfq_id => r.id)' for #<Module:0x42d5c90>

没有eval,调用字符串路径的正确方法是什么?

4

2 回答 2

3

如果要使用send,则必须将方法的名称与参数分开传递。你必须做这样的事情:

Rails.application.routes.url_helpers.send('jobshop_quotex.quotes_path', :rfq_id => r.id)

但是,我不认为这会做你想要的。我真的不明白你为什么要这样做......

于 2013-10-19T22:44:54.187 回答
1

我不知道你为什么要这样做,但正确的做法是使用 Proc。

JobshopRfqx.quote_index_path = Proc.new { |js_quotex, r| js_quotex.quotes_path(:rfq_id => r.id) }

然后你可以通过调用得到你正在寻找的路径:

link_to t('Quotes'), JobshopRfqx.quote_index_path.call(jobshop_quotex, r)

如果需要执行上述操作,我 90% 确定您的系统设计不佳。没有看到整个事情,我不能给你任何更好的建议。

于 2013-10-19T22:53:29.993 回答