Rails找不到模板

问题描述 投票:0回答:5
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

确实存在。有任何想法吗?

ruby-on-rails actionview
5个回答
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选项不同,它不接受部分文件。


2
投票

Layout documentationthis 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'


1
投票

或者,可能:

class FwExportsController < ApplicationController

  def import_spreadsheet
    @import_spreadsheet = FwExport.new 
  end

end

如果你有app/views/fw_exports/import_spreadsheet.html.slim(视图,而不是部分),那么我认为它将默认/约定呈现。


0
投票

如果你刚刚更新到Rails 5.1并且看到了这个错误,它也可能是由于在控制器中使用render nothing引起的,因为在Rails 5.1中删除了这个方法。这并不总是很明显,因为有时控制器线可能在堆栈跟踪的几个深度。但是如果你检查堆栈跟踪中所有控制器的行号并找到render nothing,你就找到了罪魁祸首。如果这确实是您的问题,那么您需要做的就是替换这个旧方法。

例如,如果您的旧代码是:render nothing: true, status: 403

您可以通过将其更改为:head :forbidden来修复错误


-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

© www.soinside.com 2019 - 2024. All rights reserved.