我在Rails中应该是一个相对简单的表单,我用它来发送两个不同的预览,桌面预览和移动预览的电子邮件。
<form id="email-form" role="form" action="<%= action_name == 'desktop_preview' ? email_preview_newsletter_path(@newsletter) : email_preview_newsletter_path(@newsletter, mobile: 'true') %>">
<label for="email_address">Email</label>
<input type="email" id="email_address" name="email_address" value="<%= params[:email_address] %>" placeholder="PLEASE ENTER EMAIL">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<input type="submit" value="Send" class="btn btn-primary"></input>
</form>
现在我进行了设置,以便将两个预览都发送到同一个端点&#39; / email_preview&#39;,但就mobile_preview而言,我希望传递一个&#39; mobile&#39; ;查询字符串,使其最终看起来像这样:
&#39;?/ email_preview移动=真&#39;
当我检查页面上的表单时,所有内容都按顺序查看,但是当它传递给控制器时,移动设备“查询字符串的一部分消失,只有&#39; email_address&#39;存在。
我想我可以将移动价值作为一个隐藏的字段传递,但对此我感觉不对。设置此表单的最佳方法是什么,以便移动&#39;和&#39; email_address&#39;键值对在发送到控制器时作为查询字符串传递?
答案 0 :(得分:0)
在写出这个问题的过程中,我确切地意识到问题是什么:
我将表单设置为GET请求而不是POST请求。
这导致任何预先建立的查询字符串在设置表单中定义的GET参数的过程中被删除(在本例中为'email_address'参数)。将表单从GET更改为POST,(即form method =“POST”)
照顾这个问题。请注意,如果您要在rails中手动设置这样的表单,那么您还需要明确地处理csrf令牌。这可以通过将以下输入与帮助器方法一起插入到表单中来完成:
input type =“hidden”name =“authenticity_token”value =“&lt;%= form_authenticity_token%&gt;”