【问题标题】:Query string not being passed to controller查询字符串未传递给控制器
【发布时间】:2014-12-19 17:31:31
【问题描述】:

我在 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>

现在我已经进行了设置,以便将两个预览发送到同一个端点“/email_preview”,但在 mobile_preview 的情况下,我想传入一个“mobile”查询字符串,以便它最终看起来像这个:

'/email_preview?mobile=true'

当我检查页面上的表单时,一切看起来都井然有序,但是当它传递给控制器​​时,查询字符串的“移动”部分消失了,只存在“电子邮件地址”。

我想我可以将移动值作为隐藏字段传递,但我觉得这不太合适。设置此表单的最佳方法是什么,以便“mobile”和“email_address”键值对在发送到控制器时作为查询字符串传递?

【问题讨论】:

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


    【解决方案1】:

    在写出这个问题的过程中,我确切地意识到了问题所在:

    我将表单设置为 GET 请求,而不是 POST 请求。

    这导致任何预先建立的查询字符串在设置表单中定义的 GET 参数(在本例中为“email_address”参数)的过程中被删除。将表单从 GET 更改为 POST,(即 form method="POST")

    解决了这个问题。请注意,如果您要在 rails 中手动设置这样的表单,那么您还需要明确处理 csrf 令牌。这可以通过在表单中​​插入以下带有辅助方法的输入来完成:

    input type="hidden" name="authenticity_token" value=""

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      相关资源
      最近更新 更多