首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4+ append_view_path

Rails 4+ append_view_path
EN

Stack Overflow用户
提问于 2016-10-31 12:57:11
回答 4查看 1.5K关注 0票数 32

我想在rails gem的控制器中使用动态路径。

我已经添加了

代码语言:javascript
复制
module MyGem
  class FooController < Config.controller
    before_action ->{ append_view_path "app/views/my_gem/#{wizard_name}" }
...

在视图中,我需要指定如下路径

代码语言:javascript
复制
app/views/my_gem/#{wizard_name}/my_gem/foo/some.erb

在Rails中,是否以某种方式剪切gem命名空间的相对路径,并获得如下的查找路径?

代码语言:javascript
复制
app/views/my_gem/#{wizard_name}/some.erb
# or
foo/bar/some.erb

谢谢!

更新:

我明白,在Engine中禁用isolate_namespace是有办法的,但我相信,这不是最好也是唯一的选择。

UPD2:对于Rails4来说,这个想法是非常有用的https://coderwall.com/p/p_yelg/render-view-outside-of-a-controller-in-rails-4

EN

回答 4

Stack Overflow用户

发布于 2018-07-12 18:34:31

Devise gem有一种通过覆盖_prefixes方法来添加视图查找路径的方法:

代码语言:javascript
复制
class DeviseController < Devise.parent_controller.constantize
  include Devise::Controllers::ScopedViews

  # Override prefixes to consider the scoped view.
  # Notice we need to check for the request due to a bug in
  # Action Controller tests that forces _prefixes to be
  # loaded before even having a request object.
  #
  # This method should be public as it is is in ActionPack
  # itself. Changing its visibility may break other gems.
  def _prefixes #:nodoc:
    @_prefixes ||= if self.class.scoped_views? && request && devise_mapping
      ["#{devise_mapping.scoped_path}/#{controller_name}"] + super
    else
      super
    end
  end

end

这能应用到你的用例中吗?

请参阅来源:

https://github.com/plataformatec/devise/blob/master/app/controllers/devise_controller.rb

票数 1
EN

Stack Overflow用户

发布于 2019-06-24 09:40:26

通常,您应该只覆盖来自gem的部分视图或函数,不要像这样从gem库加载,因为当部署到真实服务器时,会给您的调试和改进带来很多麻烦。

票数 0
EN

Stack Overflow用户

发布于 2017-01-31 16:08:44

例如,您可以创建读取任意文件的how render方法,解释ERB并将其呈现为HTML页面。

代码语言:javascript
复制
ERB.new(File.read(Rails.root.join('foo', bar', 'some.erb'))).result(binding)

通过传递binding,模板将可以访问当前上下文中的所有变量。

有关更多详细信息,请参阅再培训局文档:http://apidock.com/ruby/ERB

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

https://stackoverflow.com/questions/40336777

复制
相关文章

相似问题

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