我有几个局部变量放在名为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/