我试图为Rails做一个可编辑的模板,但我无法弄清楚。基本上我试图做的是一个普通的动作邮件程序视图,但在我发送它之前,我希望能够编辑它的内容。
总结一下,假设我在邮件文件夹中有一个report_user.html.rb
视图(里面有我的默认模板),当我点击一个报告按钮时,会出现一个带有编辑器的文本区域的新页面。在这个编辑器中,我希望拥有我的默认模板的邮件正文,进行更改,然后在我点击发送后,它会发送适合我模板其余部分的新更改。
有没有办法做到这一点?
答案 0 :(得分:0)
您想要创建标准的Rails表单。如果您只有一封电子邮件,则可以将默认文本保存在Rails代码中,否则您可以将电子邮件模板保存在模型中。在页面加载时加载表单中的默认内容,然后在单击“发送”时发送电子邮件。
(如果你想使用Markdown,请在发送之前使用像Redcarpet这样的宝石处理文本。)
答案 1 :(得分:0)
我想这就是你想要的。
<强> 1。没有默认模板
从用户那里获取一个字符串,然后将其传递给发送电子邮件的方法。
class UserMailer < ActionMailer::Base
def welcome_email(user, email_body)
mail(to: user.email,
body: email_body,
content_type: "text/html",
subject: "Already rendered!")
end
end
<强> 2。使用电子邮件模板
<强> report_user.html.rb 强>
<html>
<body>$body_content<body>
</html>
获取模板并将$ body_content替换为params [:body]
希望有效
答案 2 :(得分:0)
我假设您已经拥有与报告页面中的发送操作相对应的控制器操作。
要在文本字段中加载邮件正文,您可以使用模板模型的实例,其中模板模型具有名为body的字段,它包含邮件模板的源代码,或者使用要预加载的静态文本文字形式。
这样您就可以编辑文本字段的内容并将其提交给控制器。在负责报告提交操作的控制器操作中,您可以访问params
哈希中的所有提交数据。
创建新模板实例并将其传递给Mailer操作或将整个文本形式作为参数传递(不推荐)。
嵌入您在邮件程序操作视图中传递的模板对象的主体。 我的解决方案如下(为简洁起见,遗漏了一些代码)
在控制器中:
class ReportsController < ActiveController
def submit
new_template = Template.create(params[:template])
UserMailer.send_report(user_id, new_template.id)
end
end
在邮件中:
def send_report(user_id, template_id)
@user = User.find(user_id)
@template = Template.find(template_id)
mail to: @user.email
end
在模板中:
<%= @template.body %>