Rails,在模型中获取资源路径

44

我该如何获取模型中资源的路径?我需要将其存储在数据库中,并希望与resourcename_path(resource)返回的相同url一致。


2
对于最完整的答案,请参见 https://dev59.com/o3RC5IYBdhLWcg3wUfJ2。 - just__matt
2个回答

86

在Rails 3和Rails 4中,您可以使用:

Rails.application.routes.url_helpers

例如。

Rails.application.routes.url_helpers.posts_path

1
一个小时的搜索,没有人能像你一样给我如此简单明了的答案。非常感谢。 - dimitarvp
4
如果您需要访问引擎的路由,则等效的方法是:MyEngineName::Engine.routes.url_helpers.some_path。请注意,将涉及到引擎名称和路径帮助器的使用。 - Theo Scholiadis
在环境配置文件中设置一次 :host 选项,避免在各处复制它:Rails.application.routes.default_url_options[:host] = 'localhost:3000' - Andrew
3
Rails.application.routes.url_helpers.posts_path 完成了任务! 谢谢! - Daniel

46

Rails 3 中,你可以在模型中包含 url helpers(虽然这通常不是处理事情的最佳方式):

class MyClass < ActiveRecord::Base
  include Rails.application.routes.url_helpers
end

在 Rails 2 中,我认为是 include ActionController::UrlWriter,但我记不清了。Google 是你的朋友。


1
Rails 2 是 ActionView::Helpers:UrlHelper 和 ActionController::UrlWriter。 - jvatic
您的Rails 3解决方案生成了以下错误:RuntimeError:缺少链接到的主机!请提供:host参数或设置default_url_options [:host]。 - jvatic
如果你使用 _url 而不是 _path,你需要告诉它主机是什么。在视图中,它可以使用当前主机,但是模型没有那样的知识,因此需要告诉它要使用什么。 - idlefingers
3
@jvatic:你可以在这里给我们答案吗? - Sadiksha Gautam
在环境配置文件中设置一次 :host 选项,避免在各处复制它:Rails.application.routes.default_url_options[:host] = 'localhost:3000' - Andrew
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接