如何在 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:如何跨视图访问模型和控制器数据?

如何在 Rails 4 中使用关注点

Rails 4 - 如何在活动记录查询中为包含()和连接()提供别名

Rails 4 在模型中添加新列或字段

如何向 Rails 4 中的所有 ActiveRecord 模型添加 `audited` 方法调用?

如何使用 Rails 在 MongoDB 中验证跨模型的唯一性?