在我添加样式标签之前,我有一个可以正常工作的表单(我正在使用 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 请求。我没有像没有标签那样在保存时重定向我,而是在 URL 中看到了这一点:
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。使用 :method => post 在 rails 中指定它会产生相同的结果(上面的 GET 请求和 URL 信息)。在 HTML 中使用看起来像一个 POST 请求,但用户对象没有保存(我相信这是这种情况,因为我没有被重定向到 root_url,它在 Controller 中设置并且在不使用标签时工作正常)。有任何想法吗?
最佳答案
你要这个:
<%= form_for @user, :html => { :class => "form-stacked", :id => "something" } do |f| %>
stuff goes in here as before
<% end %>
关于HTML <form> 标签导致 Rails 表单提交 GET 而不是 POST 请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8161995/