为什么rails服务器发送GET请求并且我发出了form_for的POST请求?

时间:2016-10-01 11:27:46

标签: html ruby-on-rails routes erb form-for

//sessions controller

  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 %>

这是我的表单,当我在控制台中搜索db:routes时,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 个答案:

答案 0 :(得分:1)

指定如下的操作类型:

<%= form_for @user, url: create_user_session_url, method: :post do |f| %>
相关问题