如何在 Rails 4 的模型中访问 polymorphic_path?
Posted
技术标签:
【中文标题】如何在 Rails 4 的模型中访问 polymorphic_path?【英文标题】:How can I access polymorphic_path inside a model in Rails 4? 【发布时间】:2015-01-16 04:03:13 【问题描述】:很简单,我想在 Rails 4 模型中使用 polymorphic_path
方法。是的,我知道关注点分离很差。我知道Rails.application.routes.url_helpers
,但polymorphic_path
不在那里。
【问题讨论】:
【参考方案1】:尝试也包括PolymorphicRoutes
:
include ActionDispatch::Routing::PolymorphicRoutes
include Rails.application.routes.url_helpers
def link
polymorphic_path(self)
end
【讨论】:
哈,分别尝试了每一个,但没有一起尝试。完美运行。 @markets,这也适用于模型内部,但不适用于辅助模块...编辑:提出问题:***.com/questions/35035963/… 在使用非多态 url 时,我以前可以使用Rails.application.routes.url_helpers.todo_path( ... )
,但不适用于 polymorphic_url
。您必须在类中包含Rails.application.routes.url_helpers
,然后将其与polymorphic_url
一起使用。奇数。【参考方案2】:
我知道 OP 指定了 Rails 4,但如果有人像我一样使用 Rails 5 在这里寻找答案,这里有两种方法在 Rails 5 的模型中访问 polymorphic_path
:
class Something
# The following line is enough, no need for ActionDispatch::Routing::PolymorphicRoutes in Rails 5
include Rails.application.routes.url_helpers
end
或者,如果您想避免包含所有方法,只需添加一个封装调用的私有方法即可!
class Something
def do_stuff
polymorphic_path(a_resource)
end
private
def polymorphic_path(resource)
Rails.application.routes.url_helpers.polymorphic_path(resource)
end
end
请注意,该类不需要继承自 ApplicationRecord,这两种方法都适用于 PORO(Plain-Old Ruby 对象)。
【讨论】:
以上是关于如何在 Rails 4 的模型中访问 polymorphic_path?的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4 - 如何在活动记录查询中为包含()和连接()提供别名