【问题标题】:Why is rails server sending GET request and i put in a POST request for form_for?为什么 Rails 服务器发送 GET 请求而我为 form_for 输入了 POST 请求?
【发布时间】:2016-10-01 11:27:45
【问题描述】:

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

这是我的表单,当我在控制台中执行 rake 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 请求。

【问题讨论】:

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


    【解决方案1】:

    像这样指定动作类型:

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

    【讨论】:

    • 我刚刚试了一下,它什么也没做。服务器仍然发送 GET 请求
    • 你能传入:post作为符号吗。更新了我的答案
    • 感谢您的帮助,但我知道出了什么问题。我将该表单呈现为其他内容,使其发送获取请求。我尝试了你所做的,但我没想过这样做来调试它。
    猜你喜欢
    • 2015-08-06
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多