Rails 4在邮件视图中使用部分视图

4

我在ActionMailer的视图中遇到了关于partials的问题,它们就是不起作用 - 我不知道是我做错了什么,这是一个错误还是根本不支持。

这应该可以工作,因为这也需要在邮件视图中具有DRY代码。从我的测试中,我看到helper是有效的(在将它们包含到ActionMailer类中之后)

我正在使用:Rails 4.0.0和Ruby 2.0.0-p247

错误信息:

ActionView::MissingTemplate at /events/81/user_invitations
==========================================================

> Missing partial user_invitation_mailer/test_partial with {:locale=>[:en], :formats=>[:text], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}. Searched in:
  * "/Users/user/Sites/participate/app/views"
  * "/Users/user/.rvm/gems/ruby-2.0.0-p247/gems/devise-3.4.0/app/views"

但这个部分确实存在!- 我不被允许上传图片...结构如下:
- views
-- user_invitation_mailer
--- _test_partial.html.erb
--- user_invitation.text.erb

详情:

在控制器中调用:

UserInvitationMailer.user_invitation(@invitation).deliver

UserInvitationMailer:

class UserInvitationMailer < ActionMailer::Base
  add_template_helper(MailerHelper) # for testing including helpers.

  def user_invitation(invitation)
    @invitation = invitation
    mail(to: @invitation.email, subject: 'Invitation')
  end
end

user_invitation.text.erb:

Hi <%= @invitation.email %>,

This is a test email see:

<%# test_helper %>
<%= render partial: 'test_partial' %>

Thanks

_test_partial.html.erb:

"Test the partial."

(添加:) 无法工作:

<%= render partial: 'test_partial' %>
<%= render partial: './test_partial' %>
<%= render partial: '../test_partial' %>
<%= render partial: 'user_invitation_mailer/test_partial' %>
3个回答

8
Rails控制台会告诉你缺少哪些局部模板文件的位置:

Missing partial user_invitation_mailer/test_partial with {:locale=>[:en], :formats=>[:text], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}.

Searched in:

  • "/Users/user/Sites/participate/app/views"
所以,局部模板文件的根目录是您的views文件夹。您可以创建新文件夹:

/views/partials/_some_partial.html.erb

然后在您的模板中:

render "partials/some_partials", local_variables: @model.some_variables

或者只渲染完整路径的局部模板文件:

render "/user_invitation_mailer/test_partial"

更新: 请查看下面的评论以获取完整答案。

哦,谢谢您的评论!实际上它并没有直接解决我的问题 - 但是您的答案让我意识到了实际的错误(因此,我接受了这个答案,因为它带领我找到了答案)。 - Michael Fehr
2
实际问题就在我面前。错误信息显示“:formats=>[:text]”。我的部分视图一直使用的是“html”格式 - 现在我想知道自己为什么这么糊涂;-) 最终,正确的答案是:使用partial.text.erb或调用**render partial: 'partial.html.erb'**。你可以更新你的答案,加入这些信息以使其完整。 - Michael Fehr

0
在Rails 4中,您可以尝试使用<%= render 'test_partial' %>来实现,它会起作用。

谢谢你的回答,但不知何故这个方法也不起作用。我可以问一下,你是否在ActionMailer视图中使用过这个方法? - Michael Fehr

0

你找到解决方案了吗?我也遇到了同样的问题。但是如果定义了一些共享文件夹,就可以呈现部分内容。 编辑-找到了问题所在。我没有正确关闭调用。


抱歉,不是的。但是从你的评论中我可以看出它对你有效。怎么做到的?;-) - Michael Fehr
嗨,我错放了一个闭合标签。你尝试过 <%= render partial: '/user_invitation_mailer/test_partial' %> 吗? - pra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接