2011-11-11 11 views
5

Robię aplikację Rails 3.1 i mam formularz rejestracji, który działał dobrze, ale wydawało mi się, że zmieniłem coś, aby go złamać .. Używam Twittera bootstrap i twitter_bootstrap_form_for gem . Wprowadziłem pewną zmianę polegającą na formatowaniu pól formularza, ale co ważniejsze, po przesłaniu formularza rejestracyjnego w celu utworzenia nowego użytkownika informacje są wyświetlane w adresie URL i wyglądają tak:Formularz Railsowy wysyłający żądanie GET zamiast żądania POST

EDYCJA: dzieje się to w najnowszych wersjach Chrome i 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

Oto kod do postaci:

<div class="span7"> 
     <h3 class="center" id="more">Sign Up Now!</h3> 
     <%= twitter_bootstrap_form_for @user do |user| %> 
     <%= user.email_field :email, :placeholder => '[email protected]' %> 
     <%= user.password_field :password %> 
     <%= user.password_field :password_confirmation, 'Confirm Password' %> 
      <%= user.actions do %> 
     <%= user.submit 'Sign Up' %> 
     <% end %> 
     <% end %> 
    </div> 

Oto kod na 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 

Nie wiem, czy jest ich więcej, ale jeśli tak, daj mi znać! Dziękuję Ci!

Edit: Dla debugowania Próbowałem określając: słupek, a także stosując zwykły 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 %> 

To daje mi ten sam problem jak wyżej.

Dodawanie 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 

Odpowiedz

3

Problemem było to, że określenie znacznik formularza HTML, gdy Rails form_for generuje własny. Zobacz poniżej, aby dodać klasę do formularza:

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

To zadziałało dobrze. Nadal nie jestem pewien, dlaczego posiadanie 2 tagów wygenerowałoby żądanie GET.

0

Wygląda na to, dla wysyła żądanie GET, raczej, że żądania POST. Nie jestem pewien, dlaczego tak się dzieje (próbowałeś użyciu zwykłego form_for dla celów debugowania?), Ale powinieneś być w stanie rozwiązać mój to wyraźnie ustawienie metody:

<%= twitter_bootstrap_form_for(@user, :method => :post) do |user| %> 
+0

Próbowałem określając: post bezskutecznie. I próbowałem użyć zwykłego form_for. Dodanie powyższego kodu jako edycji, jeśli nie masz nic przeciwko spojrzeniu. Nadal mam ten sam problem .. – kcurtin

+0

Masz rację, przepraszam za literówkę. Czy możesz opublikować swoje 'routes.rb'? –

+0

Nie ma problemu, dokonałem edycji, ponieważ zdałem sobie sprawę, że zabrzmiało to trochę dziwacznie :) – kcurtin

Powiązane problemy