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

时间:2017-12-27 20:26:42

标签: ruby-on-rails forms parameters

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

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

  1. 填写表格
  2. 将表单发送给控制器
  3. 获取一个视图,显示刚发送的数据以及控制器从表单输入生成的一些其他数据 4按一个按钮确认数据正确
  4. 现在将所有内容保存到数据库中。
  5. 当前状态是:我有一个表单发布到控制器上的预览操作,在那里做我的魔术并渲染预览视图。 在该视图中,我显示了我的所有数据(它来自控制器,作为一个具有嵌套对象集合的对象)。 为了在验证后传回数据,我尝试使用一个简单的按钮。 据我了解" 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>
    

    我在哪里错了?

1 个答案:

答案 0 :(得分:1)

以下是button_to的{​​{3}}:

  

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

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

请改为尝试:

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