用户填写的表格如下:
简化版......
<%= form_for @email, url: email_path(@email) do |f| %>
<%= f.text_field :subject, class: "form-control" %>
<div class="tooltip-demo" style="margin-top:20px;margin-left:10px">
<%= link_to "Preview", preview_email_path, class: "btn btn-sm btn-primary preview", remote: true %>
</div>
<% end %>
在我的电子邮件控制器中,我有一个如下所示的方法:
def preview
print "Email sent!"
print params.to_json
respond_to do |format|
format.json { head :no_content }
format.js { }
end
end
如何将文本域:subject
中的值传递给我的预览方法才能验证?
这就是我的路线看起来......如果重要:
get :preview_email, to: "emails#preview"
答案 0 :(得分:0)
在提交表单之前,您没有使用附加所有表单信息的Rails表单助手。
所以一种方法是删除emails#preview
操作,只留下email
操作。
然后在您的表单中,您可以有多个submit
按钮,如下所示:
<%= f.submit "Preview"
<%= f.submit "Submit"
最后在您的控制器中,您可以分离一些逻辑,只需检查具有内容commit
的参数Preview
(如果用户已按下预览按钮)或Submit
。
答案 1 :(得分:0)
我不知道您可以在路线中添加可选参数的方式,在link_to
中进行设置,然后在不使用JS的情况下进行更改。
但我认为你可以尝试定义你的路线:
get '/preview_email', to: 'emails#preview', as: 'preview_email'
然后你的控制器就像你一样:
def preview
print "Email sent!"
print params.to_json
respond_to do |format|
format.json { head :no_content }
format.js { }
end
end
我认为最大的变化是在您看来,当您可以省略remote: :true
中的link_to
部分和路线定义时,从表单输入和用户处获取主题点击“预览”链接,通过email_preview
路径向该方法发出AJAX请求,这样,您就可以收到主题,并且可以进行所需的任何验证:
没有路由,它是''
,但是id
可以让您的JS脚本可以访问它。所以,你得到preview
锚,添加一个点击监听器,当用户点击它时,然后使用preventDefault()
来停止正常运行,然后创建一个变量来获取{{{ 1}}输入标记,并使用email[subject]
使请求传递主题变量值并捕获错误:
fetch