如何加载UrlHelper和Rails中的路由?

Fed*_*les 3 ruby ruby-on-rails

我想link_to在PORO中包含路线和方法.在控制台中测试时,我遇到了这样的问题:

如果我包含没有路由助手的UrlHelper,一切似乎都可以正常工作:

ruby-1.9.3-rc1 :001 > Rails.version
=> "3.2.0.rc2" 
ruby-1.9.3-rc1 :001 > include ActionView::Helpers::UrlHelper
=> Object 
ruby-1.9.3-rc1 :002 > link_to "foo", Rails.application.routes.url_helpers.ponies_path
 => "<a href=\"/ponies\">foo</a>" 
Run Code Online (Sandbox Code Playgroud)

如果我包含路线:

ruby-1.9.3-rc1 :001 > include ActionView::Helpers::UrlHelper
ruby-1.9.3-rc1 :003 > include Rails.application.routes.url_helpers
 => Object 
ruby-1.9.3-rc1 :004 > link_to "foo", ponies_path
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

NameError: undefined local variable or method `controller' for #<ApplicationController:0x007fa1497ecc40>
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

Tig*_*ine 15

正如所建议的那样,您应该将该app对象用于routes部分,并且您应该使用该helper对象作为link_to.使用控制台时,无需通过Ruby包含任何帮助程序:

helper.link_to "foo", app.ponies_path
Run Code Online (Sandbox Code Playgroud)

  • 仅仅是为了将来:如果您需要在控制台外部访问`helper`,您可以将其定义为:`helper = ApplicationController.helpers` (4认同)