Комбинированный вход и страница регистрации? - PullRequest
0 голосов
/ 03 марта 2011

Это несколько противоречит соглашению о рельсах, но я пытаюсь использовать один контроллер, который управляет как аутентификацией сеанса пользователя, так и регистрацией пользователя. У меня проблемы с выяснением, как это сделать.

Пока что я объединяю пользовательский контроллер и контроллер сессий и использую метод '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'

Какой лучший способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

В ваших формах вы можете указать URL-адрес, выполнив что-то вроде этого:

<% form_for @user_session, :url => { :action => 'create_session' } do |f| -%>

Имейте в виду, что определение имен действий, таких как 'create_session', означает «нересурсные маршруты».Я бы посоветовал обратиться к руководствам Rails по маршрутизации и формам , чтобы помочь вам получить более четкое представление о том, чего вы пытаетесь достичь.

0 голосов
/ 24 сентября 2013

Не имеет ли смысла использовать для этого отдельный контроллер?Я думал просто о том, чтобы использовать третий контроллер (не сеансы или пользователей), такой как «Статические страницы», и затем оба действия были доступны в этом контроллере.Казалось бы, это больше соответствует соглашениям Rails, но я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...