【发布时间】: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
很简单,我想在 Rails 4 模型中使用 polymorphic_path 方法。是的,我知道关注点分离很差。我知道Rails.application.routes.url_helpers,但polymorphic_path 不在那里。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 routing
尝试也包括PolymorphicRoutes:
include ActionDispatch::Routing::PolymorphicRoutes
include Rails.application.routes.url_helpers
def link
polymorphic_path(self)
end
【讨论】:
Rails.application.routes.url_helpers.todo_path( ... ),但不适用于 polymorphic_url。您必须在类中包含Rails.application.routes.url_helpers,然后将其与polymorphic_url 一起使用。奇数。
我知道 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 对象)。
【讨论】: