【问题标题】:How can I access polymorphic_path inside a model in Rails 4?如何在 Rails 4 的模型中访问 polymorphic_path?
【发布时间】:2015-01-16 04:03:13
【问题描述】:

很简单,我想在 Rails 4 模型中使用 polymorphic_path 方法。是的,我知道关注点分离很差。我知道Rails.application.routes.url_helpers,但polymorphic_path 不在那里。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 routing


    【解决方案1】:

    尝试也包括PolymorphicRoutes

    include ActionDispatch::Routing::PolymorphicRoutes
    include Rails.application.routes.url_helpers
    
    def link
      polymorphic_path(self)
    end
    

    【讨论】:

    • 哈,分别尝试了每一个,但没有一起尝试。完美运行。
    • @markets,这也适用于模型内部,但不适用于辅助模块...编辑:提出问题:stackoverflow.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 对象)。

    【讨论】:

      猜你喜欢
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多