Rails формируют выдачу GET-запроса вместо POST-запроса - PullRequest
5 голосов
/ 11 ноября 2011

Я делаю приложение на Rails 3.1 и у меня есть форма регистрации, которая работала нормально, но я, кажется, что-то изменил, чтобы сломать ее ... Я использую загрузчик Twitter и twitter_bootstrap_form_for gem. Я внес некоторые изменения, связанные с форматированием полей формы, но, что более важно, когда я отправляю форму регистрации для создания нового пользователя, информация отображается в URL и выглядит следующим образом:

РЕДАКТИРОВАТЬ: это происходит в последних версиях Chrome и Firefox

http://localhost:3000/?utf8=%E2%9C%93&authenticity_token=UaKG5Y8fuPul2Klx7e2LtdPLTRepBxDM3Zdy8S%2F52W4%3D&user%5Bemail%5D=kevinc%40example.com&user%5Bpassword%5D=testing&user%5Bpassword_confirmation%5D=testing&commit=Sign+Up

Вот код для формы:

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

Это дает мне ту же проблему, что и выше.

Добавление маршрутов .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

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011

Проблема заключалась в том, что я указывал тег HTML-формы, когда Rails form_for генерирует свой собственный. См. Ниже, чтобы добавить класс в форму:

<%= form_for(@user, :html => { :class => "form-stacked"} )  do |f| %>

Это сработало нормально. Я до сих пор не уверен, почему наличие 2-х тегов сгенерирует GET-запрос.

0 голосов
/ 11 ноября 2011

Похоже, что вы отправляете запрос GET, а не запрос POST.Я не уверен, почему это происходит (вы пытались использовать обычный form_for для целей отладки?), Но вы должны быть в состоянии исправить это, явно указав метод:

<%= twitter_bootstrap_form_for(@user, :method => :post) do |user| %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...