首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化前查找子类目录,配置干视图路径

初始化前查找子类目录,配置干视图路径
EN

Stack Overflow用户
提问于 2017-12-07 01:27:19
回答 1查看 68关注 0票数 0

我在多个Rails引擎中使用dry-views,并且我必须在每个子类中复制配置。

代码语言:javascript
复制
class BaseView < Dry::View::Controller
  configure do |c|
    c.paths = [File.join(__dir__, 'templates')]
  end
end

class SubView < BaseView
  configure do |c|
    c.paths = [File.join(__dir__, 'templates')] # todo: remove me
  end
end

原因是,我的视图可以深度嵌套在app的子文件夹中,即:

代码语言:javascript
复制
app/
app/foo/index.rb
app/foo/templates/index.html.erb
app/foo/bar/show.rb
app/foo/bar/templates/show.html.erb

此外,在大多数情况下,BaseView类并不在同一个gem中。

如果我从SubView类中删除configure块,则不再找到该模板。__dir__变量包含BaseView类的目录路径。

我尝试在基类中实现一个初始化后的方法,它可以访问子类的目录。但在这一点上,由于dry-rb配置中的限制,该配置不再可能。必须在初始化之前进行配置。

我能想到的唯一解决方案是在每个类中复制configure块,或者有一个特定于gem/engine的父类来配置所有可能的模板路径。

查找在每个子类中实现的某个方法的目录的通常方法在这种情况下也不起作用,因为大多数视图甚至没有定义方法。

在父类的方法中,在这个类的加载阶段,有没有更好的方法来访问给定类的目录?

EN

回答 1

Stack Overflow用户

发布于 2017-12-07 01:38:56

代码语言:javascript
复制
class BaseView < Dry::View::Controller
  def self.inherited(child)
    child.class_eval do
      configure do |c|
        c.paths = [File.join(__dir__, 'templates')]
      end
    end
  end
end

回调Class#inherited

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47680139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档