查询字符串未传递给控制器

时间:2014-12-19 17:31:31

标签: ruby-on-rails forms post get params

我在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;键值对在发送到控制器时作为查询字符串传递?

1 个答案:

答案 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;”