HTML <form>标记导致Rails表单提交GET而不是POST请求</form>

时间:2011-11-17 04:08:39

标签: html ruby-on-rails forms get ruby-on-rails-3.1

我有一个表单可以正常工作,直到我添加样式标记(我正在使用twitter bootstrap)。该应用程序是Rails 3.1,我在Mac上。这是一个可以正常运行的表单:

<%= form_for @user do |f| %>
<% if @user.errors.any? %>
  <div class="alert-message error">
    <h2>Form is invalid</h2>
      <ul>
        <% for message in @user.errors.full_messages %>
          <li><%= message %></li>
        <% end %>
      </ul>
  </div>
  <% end %>

  <div class="field">
    <%= f.label :email %>
    <%= f.text_field :email %>
  </div>
  <div class="field">
    <%= f.label :password %>
    <%= f.password_field :password %>
  </div>
  <div class="field">
    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation %>
  </div>
  <div class="actions"><%= f.submit %></div>
<%end %>

然后,当我将标签添加到相同的确切形式时:

<form class="form-stacked">
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
  <div class="alert-message error">
    <h2>Form is invalid</h2>
      <ul>
        <% for message in @user.errors.full_messages %>
          <li><%= message %></li>
        <% end %>
      </ul>
  </div>
  <% end %>

  <div class="field">
    <%= f.label :email %>
    <%= f.text_field :email %>
  </div>
  <div class="field">
    <%= f.label :password %>
    <%= f.password_field :password %>
  </div>
  <div class="field">
    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation %>
  </div>
  <div class="actions"><%= f.submit %></div>
<%end %>
</form>

此表单似乎发出GET请求而不是POST请求。不像没有标签那样在保存时重定向我,我在网址中看到了这一点: http://localhost:3000/signup?utf8=%E2%9C%93&authenticity_token=Pt1vOp7lykCPFdj5BJeZ6xwJM2vy0JomMGSKoB%2FyYpU%3D&user%5Bemail%5D=test%40get.com&user%5Bpassword%5D=kevin&user%5Bpassword_confirmation%5D=kevin&commit=Create+User

我已尝试在rails和HTML中指定post。使用以下方法在rails中指定它:method =&gt; post产生相同的结果(上面的GET请求和URL信息)。在HTML中使用看起来像一个POST请求,但User对象没有保存(我相信这是因为我没有被重定向到root_url,它在控制器中设置并且在不使用标签时工作正常)。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

你想要这个:

<%= form_for @user, :html => { :class => "form-stacked", :id => "something" } do |f| %>
  stuff goes in here as before
<% end %>