我正在创建一个Rails 3.1应用程序并且有一个正常工作的注册表单,但我似乎已经改变了一些东西来打破它..我正在使用Twitter bootstrap和twitter_bootstrap_form_for gem。我做了一些与表单字段格式相混淆的更改,但更重要的是,当我提交注册表单来创建新用户时,信息显示在URL中,如下所示:
编辑:这是在Chrome和Firefox的最新版本中发生的
以下是表单的代码:
<div class="span7">
<h3 class="center" id="more">Sign Up Now!</h3>
<%= twitter_bootstrap_form_for @user do |user| %>
<%= user.email_field :email, :placeholder => 'me@example.com' %>
<%= user.password_field :password %>
<%= user.password_field :password_confirmation, 'Confirm Password' %>
<%= user.actions do %>
<%= user.submit 'Sign Up' %>
<% end %>
<% end %>
</div>
以下是UsersController的代码:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to about_path, :notice => "Signed up!"
else
render 'new'
end
end
end
不确定是否还有更多需要,但如果有,请告诉我!谢谢!
编辑:为了调试我尝试指定:post并使用普通的form_for
<%= form_for(@user, :method => :post) do |f| %>
<div class="field">
<%= f.label :email %>
<%= f.email_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 "Sign Up" %></div>
<% end %>
这给我带来了与上面相同的问题。
添加routes.rb:
Auth31::Application.routes.draw do
get "home" => "pages#home"
get "about" => "pages#about"
get "contact" => "pages#contact"
get "help" => "pages#help"
get "login" => "sessions#new", :as => "login"
get "logout" => "sessions#destroy", :as => "logout"
get "signup" => "users#new", :as => "signup"
root :to => "pages#home"
resources :pages
resources :users
resources :sessions
resources :password_resets
end
答案 0 :(得分:3)
问题是当Rails form_for生成自己的时,我正在指定HTML表单标记。请参阅下文,向表单添加一个类:
<%= form_for(@user, :html => { :class => "form-stacked"} ) do |f| %>
这很好用。我仍然不确定为什么有2个标签会产生GET请求。
答案 1 :(得分:0)
看起来你正在发送一个GET请求,而不是一个POST请求。我不确定为什么会发生这种情况(您是否尝试使用普通form_for
进行调试?),但您应该能够通过明确设置方法来修复它:
<%= twitter_bootstrap_form_for(@user, :method => :post) do |user| %>