2016-10-01 41 views
0

//sessions controller为什么rails服务器发送GET请求,并且我为form_for放了一个POST请求?

def welcome 
    @user = User.new 
    end 

    def create 
    user = User.find_by_username(params[:username]) 
    if user.authenticate(params[:password]) 
     session[:user_id] = user.id 
     redirect_to root_path 
    else 
     redirect_to user_login_path 
    end 
    end 

//view this one doesn't work it sends a GET request

<%= form_for @user, url: create_user_session_url do |f| %> 
    <div class="form_group"> 
     <%= f.text_field :username, placeholder: "Username", class: "form-control" %> 
    </div> 
    <div class="form_group"> 
     <%= f.password_field :password, placeholder: "Password", class: "form-control" %> 
    </div> 
    <div class="form-group"> 
     <%= f.submit "Login", class: "form-control" %> 
    </div> 
    <% end %> 

//view one works and successfully sends POST request

<%= form_for @user, url: create_user_registration_url do |f| %> 
    <div class="form_group"> 
     <%= f.text_field :username, placeholder: "Username", class: "form-control" %> 
    </div> 
    <div class="form_group"> 
     <%= f.email_field :email, placeholder: "Email", class: "form-control" %> 
    </div> 
    <div class="form_group"> 
     <%= f.password_field :password, placeholder: "Password", class: "form-control" %> 
    </div> 
    <div class="form_group"> 
     <%= password_field_tag "confirm_password", nil, placeholder: "Confirm Password", class: "form-control" %> 
    </div> 
    <div class="form-group"> 
     <%= f.submit "Sign Up", class: "form-control" %> 
    </div> 
    <% end %> 

这是我的形式,当我做耙分贝:在控制台路线,create_user_session明确表示其职位。

    Prefix Verb URI Pattern    Controller#Action 
        root GET /      application#index 
create_user_registration POST /user/login(.:format) user/registrations#create 
destroy_user_registration DELETE /user(.:format)   user/registrations#destroy 
     user_registration GET /user(.:format)   user/registrations#show 
          PATCH /user(.:format)   user/registrations#update 
          PUT /user(.:format)   user/registrations#update 
     new_user_session GET /user/welcome(.:format) user/sessions#welcome 
     create_user_session POST /user/session(.:format) user/sessions#create 
    destroy_user_session DELETE /user/logout(.:format) user/sessions#destroy 

但是,我愚蠢的服务器认为它发送GET要求,Started GET "/user/welcome"我真的很困惑,因为我有相同的语法的另一种形式,它成功地发送一个POST请求。我甚至没有得到任何错误,所以很难调试。

只是柜面我并不清楚,我的服务器甚至没有尝试发送POST请求。

回答

1

指定动作类型是这样的:

<%= form_for @user, url: create_user_session_url, method: :post do |f| %> 
+0

我刚刚试了一下,没有做任何事情。服务器仍然发送GET请求 – LeongZeno

+0

你可以传递':post'作为符号吗?更新了我的回答 – Alfie

+0

谢谢你想帮忙,但我找出了什么是错的。我把这个表单渲染成了一些让它发送get请求的东西。我尝试了你所做的,但我没有想到要这样做来调试。 – LeongZeno

相关问题