Rails 5.1
In my controllers/fw_exports_conttroller.rb, I have:
def import_spreadsheet
@import_spreadsheet = FwExport.new
render template: "fw_exports/_import_spreadsheet"
end
当我为此控制器操作选择菜单项时,收到以下错误消息:
Processing by FwExportsController#import_spreadsheet as HTML
ActionView::MissingTemplate (Missing template fw_exports/_import_spreadsheet with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :slim, :coffee, :jbuilder]}. Searched in:
* "/home/utils/rails/follower_wonk/app/views"
* "/home/utils/.rvm/gems/ruby-2.4.2/gems/devise_invitable-1.7.2/app/views"
* "/home/utils/.rvm/gems/ruby-2.4.2/gems/devise-4.3.0/app/views"
):
FATAL -- : [d37603eb-3da3-4ad2-b81b-29198e6bb773] app/controllers/fw_exports_controller.rb:67:in `import_spreadsheet'
我验证了
app/views/fw_exports/_import_spreadsheet.html.slim
确实存在。有任何想法吗?
答案 0 :(得分:3)
通过" _" fw_exports/_import_spreadsheet.html.slim
看似偏僻,在渲染部分内容时,您可以跳过partial
选项,只需在views
文件夹之后传递文件路径,在您的情况下:
def import_spreadsheet
@import_spreadsheet = FwExport.new
render 'fw_exports/import_spreadsheet'
end
注意render 'fw_exports/import_spreadsheet'
即使文件没有" _"与template
选项不同,前缀不接受部分文件。
答案 1 :(得分:2)
从Layout documentation和this post来看,您似乎不应该使用部分的下划线。
该文件指出:
Rails知道这个视图属于不同的控制器,因为 字符串中嵌入的斜杠字符。如果你想成为 显式,你可以使用:template选项(这是必需的 Rails 2.2及更早版本)
这意味着您不需要提供控制器的路径,因为您在此处理相同的路径:
根据@SebastiánPalma建议编辑
def import_spreadsheet
@import_spreadsheet = FwExport.new
render "fw_exports/import_spreadsheet"
end
应该只是解决你的问题。在Rails V2.2之前还需要template
但由于您使用的是5.1,因此无需使用它。你可以简单地做render 'import_spreadsheet'
答案 2 :(得分:1)
或者,可能:
class FwExportsController < ApplicationController
def import_spreadsheet
@import_spreadsheet = FwExport.new
end
end
如果你有app/views/fw_exports/import_spreadsheet.html.slim
(一个视图,而不是一个部分),那么我认为它将默认/约定呈现。
答案 3 :(得分:0)
如果你刚刚更新到Rails 5.1并且看到了这个错误,那么它也可能是由于在控制器中使用render nothing
引起的,因为在Rails 5.1中删除了这个方法。这并不总是很明显,因为有时控制器线可能在堆栈跟踪的几个深度。但是如果你检查堆栈跟踪中所有控制器的行号并找到render nothing
,你就找到了罪魁祸首。如果这确实是你的问题,你需要做的就是替换这个旧方法。
例如,如果您的旧代码是:
render nothing: true, status: 403
您可以通过将错误更改为:head :forbidden
答案 4 :(得分:-2)
我假设您需要呈现Template
而不是Partial
。
要呈现Template
,您需要将_import_spreadsheet.html.slim
重命名为import_spreadsheet.html.slim
。
您的代码中所需的以下修改
<强>步骤1 强>
def import_spreadsheet
@import_spreadsheet = FwExport.new
render template: "fw_exports/import_spreadsheet"
end
您需要从_
_import_spreadsheet
第2步
将文件重命名为app/views/fw_exports/import_spreadsheet.html.slim
,而不是app/views/fw_exports/_import_spreadsheet.html.slim