Это несколько противоречит соглашению о рельсах, но я пытаюсь использовать один контроллер, который управляет как аутентификацией сеанса пользователя, так и регистрацией пользователя. У меня проблемы с выяснением, как это сделать.
Пока что я объединяю пользовательский контроллер и контроллер сессий и использую метод 'new', чтобы доставить как новую пользовательскую версию, так и новый пользовательский экземпляр.
С новыми маршрутами в рельсах 3 у меня возникли проблемы с выяснением того, как создавать формы для этих элементов.
Ниже приведен код:
user_controller.rb
class UserController < ApplicationController
def new
@user_session = UserSession.new
@user = User.new
end
def create_user
@user = User.new(params[:user])
if @user.save
flash[:notice] = "Account Successfully Registered"
redirect_back_or_default signup_path
else
render :action => new
end
end
def create_session
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = "Login successful!"
redirect_back_or_default login_path
else
render :action => new
end
end
end
просмотров / пользователь / new.html.erb
<div id="login_section">
<% form_for @user_session do |f| -%>
<%= f.label :email_address, "Email Address" %>
<%= f.text_field :email %>
<%= f.label :password, "Password" %>
<%= f.text_field :password %>
<%= f.submit "Login", :disable_with => 'Logining...' %>
<% end -%>
</div>
<div id="registration_section">
<% form_for @user do |f| -%>
<%= f.label :email_address, "Email Address" %>
<%= f.text_field :email %>
<%= f.label :password, "Password" %>
<%= f.text_field :password %>
<%= f.label :password_confirmation, "Password Confirmation" %>
<%= f.text_field :password_confirmation %>
<%= f.submit "Register", :disable_with => 'Logining...' %>
<% end -%>
</div>
Я думаю, мне нужно будет использовать: url => что-то для этих форм, но я не уверен, как указать.
В файле rout.rb мне еще предстоит указать либо Usersor UserSessions в качестве ресурсов (не уверен, что это лучший способ сделать это ... но я мог бы быть).
Я хотел бы, однако, зарегистрироваться и войти на той же странице, и реализовал это, выполнив следующее:
routes.rb
match 'signup' => 'user#new'
match 'login' => 'user#new'
Какой лучший способ решить эту проблему?