Rails 使用命名路由定义了一堆魔法,为您的路由创建助手。有时,特别是对于嵌套路由,跟踪给定路由助手方法调用将获得的 URL 可能会有点混乱。是否可以使用 Ruby 控制台查看给定的辅助函数将生成什么链接?例如,给定一个像 post_path(post) 这样的命名助手,我想看看生成了什么 URL。
您可以直接用 rake routes
显示它们。
在 Rails 控制台中,您可以调用 app.post_path
。这将适用于 Rails ~= 2.3 和 >= 3.1.0。
你也可以
include Rails.application.routes.url_helpers
从控制台会话内部访问帮助程序:
url_for controller: :users, only_path: true
users_path
# => '/users'
或者
Rails.application.routes.url_helpers.users_path
Rails.application.routes.url_helpers.users_path
?
在 Rails 控制台中,变量 app 保存一个会话对象,您可以在该对象上调用路径和 URL 助手作为实例方法。
app.users_path
您可以随时在控制台中检查 path_helpers
的输出。只需将助手与 app
一起使用
app.post_path(3)
#=> "/posts/3"
app.posts_path
#=> "/posts"
app.posts_url
#=> "http://www.example.com/posts"
请记住,如果您的路线是命名空间的,例如:
product GET /products/:id(.:format) spree/products#show
然后尝试:
helper.link_to("test", app.spree.product_path(Spree::Product.first), method: :get)
输出
Spree::Product Load (0.4ms) SELECT "spree_products".* FROM "spree_products" WHERE "spree_products"."deleted_at" IS NULL ORDER BY "spree_products"."id" ASC LIMIT 1
=> "<a data-method=\"get\" href=\"/products/this-is-the-title\">test</a>"
spree
示例,您是从天而降的天使。
对于 Rails 5.2.4.1,我必须
app.extend app._routes.named_routes.path_helpers_module
app.whatever_path
app.get "/"
之类的东西将虚假请求粘贴到您的应用程序对象中,然后只需 instance_eval 所需的方法,因为它们现在默认受到保护。类似于:app.instance_eval{ post_path(post) }
app.teh_path
在 Rails 4.0 中仍然有效,可用于将引擎路径与主应用程序路径分开。mount Spree::Core::Engine, :at => '/'
,那么您将通过引擎名称访问路径,例如app.spree_core_engine.some_path
。或者,如果“engine_name”配置为不同的名称,例如 in this code,那么您将执行app.spree.some_path
。host
参数:app.article_url(my_article, host: 'mydomain.com')