我有几个局部变量放在名为partials的文件夹中,然后使用render 'partials/name_of_my_partial'将它们渲染到 View 中,这没关系。

无论如何,是否有可能以一种比我只使用render 'name_of_my_partial'的方式进行设置,并且rails会自动检查此partials文件夹?

目前,我遇到了Missing partial错误。

最佳答案

在rails 3.0中,这是一个挑战,但是研究它发现,在rails 3.1中,他们已经更改了路径查找的工作方式,使其变得更加简单。 (我不知道他们更改了哪个确切版本,但可能更早了)。

在3.1中,这相对简单,因为他们引入了一种向路径查找发送多个前缀的方法。通过实例方法_prefixes检索它们。

对于所有 Controller ,只需在基本 Controller (或基本 Controller 中包括的模块,无论哪个)中覆盖它,就可以为任意前缀添加任意前缀。

因此在3.1.x中(查找使用多个前缀):

class ApplicationController
  ...
  protected
  def _prefixes
    @_prefixes_with_partials ||= super | %w(partials)
  end
end

在进行此更改之前,使用单个前缀进行查找,这使此操作变得更加复杂。这可能不是最好的方法,但是我过去通过解决丢失的模板错误并尝试使用“后备”前缀查找相同路径来解决了此问题。

在3.0.x(查找使用单个路径前缀)中
# in an initializer
module YourAppPaths
  extend ActiveSupport::Concern

  included do
    # override the actionview base class method to wrap its paths with your
    # custom pathset class
    def self.process_view_paths(value)
      value.is_a?(::YourAppPaths::PathSet) ?
        value.dup : ::YourAppPaths::PathSet.new(Array.wrap(value))
    end
  end

  class PathSet < ::ActionView::PathSet
    # our simple subclass of pathset simply rescues and attempts to
    # find the same path under "partials", throwing out the original prefix
    def find(path, prefix, *args)
      super
    rescue ::ActionView::MissingTemplate
      super(path, "partials", *args)
    end
  end
end

ActionView::Base.end(:include, YourAppPaths)

关于ruby-on-rails - 有没有一种方法可以向 "partials path"添加自定义文件夹?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7293894/

10-12 05:46