Rails 5.1 button_to helper生成查询字符串而不是隐藏表单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails 5.1 button_to helper生成查询字符串而不是隐藏表单相关的知识,希望对你有一定的参考价值。

这是我对stackoverflow的第一次尝试,所以请耐心等待...

我试图以下列方式在Rails中生成一种预览页面:

  1. 填一张表格
  2. 将表格发送给控制器
  3. 获取一个视图,显示刚发送的数据以及控制器从表单输入中生成的一些其他数据4按下按钮确认数据是否正确
  4. 现在将所有内容保存到数据库中。

当前状态是:我将表单发布到控制器上的预览操作,在那里做我的魔术并渲染预览视图。在该视图中,我显示了我的所有数据(它来自控制器,作为一个具有嵌套对象集合的对象)。为了在验证后传回数据,我尝试使用一个简单的按钮。据我理解“button_to”帮助器,我应该将我的params散列传递给帮助器,以便在一键式窗体内的一组隐藏字段中获取所有参数。但是,由于某种原因,我的按钮仅包含真实性令牌的隐藏字段。所有其他参数都附加到表单上操作的查询字符串。

我的按钮代码:

<%= button_to(:submit, :action => :create, params: @event_registration.as_json(root: true, include: :participants)) %>

生成的源代码:

<form class="button_to" method="post" action="/en/event_registrations?event_registration%5Bcreated_at%5D=&amp;event_registration%5Bevent_id%5D=1&amp;event_registration%5Bid%5D=&amp;event_registration%5Bparticipants%5D%5B%5D%5Bbirthdate%5D=2017-12-27&amp;event_registration%5Bparticipants%5D%5B%5D%5Bcountry%5D=DE&amp;event_registration%5Bparticipants%5D%5B%5D%5Bcreated_at%5D=&amp;event_registration%5Bparticipants%5D%5B%5D%5Bemail%5D=&amp;event_registration%5Bparticipants%5D%5B%5D%5Bfirst_name%5D=&amp;event_registration%5Bparticipants%5D%5B%5D%5Bid%5D=&amp;event_registration%5Bparticipants%5D%5B%5D%5Blast_name%5D=&amp;event_registration%5Bparticipants%5D%5B%5D%5Bnickname%5D=&amp;event_registration%5Bparticipants%5D%5B%5D%5Bpostcode%5D=&amp;event_registration%5Bparticipants%5D%5B%5D%5Bupdated_at%5D=&amp;event_registration%5Bupdated_at%5D=&amp;event_registration%5Buser_id%5D=1"><input type="submit" value="submit" /><input type="hidden" name="authenticity_token" value="A/jV9kY3UYSsYeF9j2+JEsL4XPAixGBYtX47shTsIp5XK5Dq2tdZsQz2KrQOzcJP6roHCEROTF+n6cYyu/iICw==" /></form>

我在哪里错了?

答案

这是documentationbutton_to

button_to(name = nil,options = nil,html_options = nil,&block)

看起来你正在通过params作为options的一部分。你应该把它们作为html_options的一部分传递给他们。当你将它们作为options传递时,你将它们作为路径的一部分传递。

试试这个:

<%= button_to(:submit, { :action => :create }, params: @event_registration.as_json(root: true, include: :participants)) %>

以上是关于Rails 5.1 button_to helper生成查询字符串而不是隐藏表单的主要内容,如果未能解决你的问题,请参考以下文章

无法使用link_to或button_to rails访问嵌套路由

在 Rails 中将表格行变成链接

Rails - 在控制器中路由动作的正确方法

如何在 Webpacker 中使用 Rails Url 助手/Rails 5.1 中的 React-rails

Rails 5.0 到 5.1 - 一对多关联上的“Cant cast Hash”

Rails 5.1、Rails 6.1.3 回顾 v3 gem 集成