#ruby-on-rails #forms #utf-8 #ruby-on-rails-3.1
#ruby-on-rails #формы #utf-8 #ruby-on-rails-3.1
Вопрос:
Я создаю приложение Rails 3.1, и у меня есть форма регистрации, которая работала нормально, но я, похоже, что-то изменил, чтобы сломать ее.. Я использую Twitter bootstrap и twitter_bootstrap_form_for для gem. Я внес некоторые изменения, которые нарушили форматирование полей формы, но что более важно, когда я отправляю форму регистрации для создания нового пользователя, информация отображается в URL и выглядит следующим образом:
РЕДАКТИРОВАТЬ: Это происходит в последних версиях Chrome и Firefox
Вот код для формы:
<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>
Вот код для пользовательского контроллера:
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
<%= 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 %>
Это вызывает у меня ту же проблему, что и выше.
Добавление 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
Ответ №1:
Проблема заключалась в том, что я указывал тег HTML-формы, когда Rails form_for генерирует свой собственный. Смотрите ниже, как добавить класс в форму:
<%= form_for(@user, :html => { :class => "form-stacked"} ) do |f| %>
Это сработало нормально. Я все еще не уверен, почему наличие 2 тегов сгенерирует запрос GET.
Ответ №2:
Похоже, что ваш for отправляет запрос GET, а не POST-запрос. Я не уверен, почему это происходит (вы пробовали использовать plain form_for
для целей отладки?), Но вы должны быть в состоянии исправить это, явно установив метод:
<%= twitter_bootstrap_form_for(@user, :method => :post) do |user| %>
Комментарии:
1. Я попытался указать:post, но безрезультатно. И я попытался использовать обычную form_for. Добавляю приведенный выше код в качестве правки, если вы не возражаете взглянуть. Все еще сталкиваюсь с той же проблемой..
2. Нет проблем, я внес правку, потому что понял, что прозвучал немного язвительно 🙂