以下代码
def show
render File.join(Rails.root, 'app', 'themes', 'default_theme', 'template'), layout: File.join(Rails.root, 'app', 'themes', 'default_theme', 'layout')
end
在rails 4.2.x中工作,但在使用Rails 5.0.0时输出以下错误
ActionView::MissingTemplate:
Missing template vagrant/app/themes/default_theme/template with {:locale=>[:nl], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby]}. Searched in:
* "/vagrant/app/views/themes/default_theme"
* "/vagrant/app/views"
* "/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/devise-ebe65b516b38/app/views"
* "/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/devise-i18n-1.1.0/app/views"
看起来它只在“app / views / *'内部搜索”。目录。有没有办法在'视图之外呈现模板。使用rails 5.0.0的目录,所以它的工作原理就像以前的Rails版本一样吗?
答案 0 :(得分:1)
您必须将新文件夹添加到配置中:
config.paths["app/views"].unshift(Rails.root.join("/vendor/myapp/views/myctrl").to_s)
或者你的控制器:
before_filter {
prepend_view_path(Rails.root.join("vendor/myapp/views/myctrl").to_s)
}
答案 1 :(得分:1)
首先附加视图路径:
class ApplicationController
prepend_view_path( Rails.root.join('app/templates') )
# ...
end
然后,您可以通过调用:{/ p>在app/templates
中呈现模板
render template: 'default_theme/template',
layout: 'default_theme/layout'
使用template
选项告诉rails不要使用控制器名称附加路径。