Так вот как выглядит мой devise/sessions/new.html.erb
:
<div id="sign_in">
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<%= f.text_field :f_name, :value => "First Name", :class => "clearField curved" %><div class="error"></div><br />
<%= f.text_field :l_name, :value => "Last Name", :class => "clearField curved" %><div class="error"></div><br />
<%= f.text_field :username, :value => "Username", :class => "clearField curved" %><div class="error"></div><br />
<%= f.password_field :password, :value => "Password", :class => "clearField curved" %><div class="error"></div><br />
<%= f.password_field :password_confirmation, :value => "Password", :class => "clearField curved" %><div class="error"></div><br />
<%= f.text_field :email, :value => "Email Address", :class => "clearField curved" %><div class="error"></div><br />
<div id="login_buttons">
<%= f.submit "Sign in", :id => "login", :value => "Submit", :class => "curved" %>
<%= f.submit "Sign in", :id => "register", :value => "Register", :class => "curved" %>
<%= f.submit "Send Reset Instructions", :id => "pass-reset", :value => "Send Reset Instructions", :class => "curved"%>
<a href="#" id="forgot-pw">Forgot pass?</a>
</div>
<% end %>
</div>
Вышеуказанное работает только для входа в систему (потому что :url => session_path(resource_name)
а не registration_path
).
То, что эта страница делает сейчас, - при загрузке страницы она скрывает все поля, кроме поля имени пользователя и пароля (то есть по умолчанию это страница входа в систему). Затем, когда они нажимают кнопку «Регистрация», она исчезает в других.
Однако, когда вы нажимаете кнопку отправки, это не работает - потому что неправильный обработчик формы управляет им.
Вот так выглядит моя обычная форма регистрации (которая работает, кстати) на devise\registrations\new.html.erb
:
<h2>Sign up</h2>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<p><%= f.label :username %><br />
<%= f.text_field :username %></p>
<p><%= f.label :email %><br />
<%= f.text_field :email %></p>
<p><%= f.label :password %><br />
<%= f.password_field :password %></p>
<p><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></p>
<p><%= f.submit "Sign up" %></p>
<% end %>
<%= render :partial => "devise/shared/links" %>
Применимая часть моего файла маршрутов выглядит так:
devise_for :users, :path_names => { :sign_up => "register",
:sign_in => "login",
:sign_out => "logout" }
devise_scope :user do
get "login", :to => "devise/sessions#new"
get "register", :to => "devise/registrations#new"
get "logout", :to => "devise/sessions#destroy"
Итак, мне нужно следующее поведение:
Пользователь заходит в систему, видит только два поля формы (имя пользователя + пароль). Они нажимают ввод, он регистрирует их.
Если они нажимают «Зарегистрироваться», не выполняя загрузку страницы, я хотел бы, чтобы появилась правильная форма (с необходимыми дополнительными полями формы: имя, фамилия и т. Д.), И когда они нажимают ввод, она выполняет регистрацию. Я также хотел бы изменить URL-адрес с myapp.com/login
на myapp.com/register
- без загрузки страницы. Если они нажали «Войти», не заполнив форму, они должны вернуться на страницу входа (myapp.com/login
), в которой отображаются только два поля (имя пользователя + пароль).
Таким образом, когда я ссылаюсь прямо на myapp.com/register
, он переходит непосредственно на эту страницу с правильными полями формы и работает правильно.
В основном функциональность аналогична тому, как github теперь управляет просмотром репозитория без обновления страницы (но URL-адрес меняется).
Предложения