ruby Rails 7 - render_to_string - MissingTemplate

ni65a41a  于 2023-04-20  发布在  Ruby
关注(0)|答案(2)|浏览(146)

我的Rails应用程序从Rails 6升级到Rails 7后遇到了一个问题。当我尝试render_to_string模板时,我收到ActionView::MissingTemplate异常。
由于这是工作正常,我不禁认为有一些新的方法来Rails 7,我无法找到。
我的代码如下:

控制器

class SomethingController < ApplicationController

  ...
  def my_action
     html_string = render_to_string(template: 'something/template.html.erb', locals: {id: params[:id]})
  end
  
end

我的期望(以及我过去的行为)是返回经过处理的模板视图,但我收到的是异常:

ActionView::MissingTemplate (Missing template something/template.html.erb with {:locale=>[:"pt-BR", :pt], :formats=>[:pdf], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :jbuilder]}.

Searched in:
  * "/Users/user/rails/rn_igreja/app/views"
  * "/Users/user/.asdf/installs/ruby/3.1.0/lib/ruby/gems/3.1.0/gems/devise-i18n-1.10.2/app/views"
  * "/Users/user/.asdf/installs/ruby/3.1.0/lib/ruby/gems/3.1.0/gems/devise-4.8.1/app/views"
  * "/Users/user/.asdf/installs/ruby/3.1.0/lib/ruby/gems/3.1.0/gems/actiontext-7.0.1/app/views"
  * "/Users/user/.asdf/installs/ruby/3.1.0/lib/ruby/gems/3.1.0/gems/actionmailbox-7.0.1/app/views"
):

app/controllers/something_controller.rb:16:in `block in my_action'
app/controllers/something_controller.rb:12:in `my_action'

其他详细信息:

  • Ruby版本:3.1.0
  • Rails版本:7.0.2

我真的很感激任何线索我错过了这里。

mfpqipee

mfpqipee1#

@user973254帮助我解决了这个问题,感谢评论:
这个答案可能会有帮助:rails render_to_string giving errors with partial view
结果是,现在还需要用render_to_string方法传递formats:参数。
我对代码的补充,使其工作,是:
1.添加formats:参数
1.删除template:参数的'html.erb'部分
1.添加layout: false(我还没有诚实地测试它是否是这个问题的关键
下面我展示了可以工作的代码。

class SomethingController < ApplicationController

  ...
  def my_action
      html_string = render_to_string(
        template: 'something/template',
        formats: [:html],
        locals: { id: params[:id] },
        layout: false
      )
  end
  
end
rwqw0loc

rwqw0loc2#

如果你使用的是一种“不常见”的格式(比如:kml或:kmz或:xls),记得将其添加到config/initializers/mime_type.rb中,否则render函数可能无法识别它。
在Rails7升级后,我遇到了同样的问题,这就是解决方案

相关问题