合并登录和注册页面?

时间:2011-03-02 23:22:32

标签: ruby-on-rails ruby-on-rails-3

这有点违反了rails惯例,但我试图让一个控制器管理用户会话身份验证和用户注册。我正在弄清楚如何解决这个问题。

到目前为止,我正在合并用户控制器和会话控制器,并使用'new'方法提供新的用户和新的用户实例。

虽然使用rails 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 =&gt;这些形式的东西,但我不确定如何指定。

在routes.rb中我还没有指定Usersor UserSessions作为资源(不相信这是最好的方法......但我可以)。

但是,我希望在同一页面上注册和登录,并通过执行以下操作实现此目的:

的routes.rb

match 'signup' => 'user#new'
match 'login'  => 'user#new'

解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

在表单上,​​您可以通过执行以下操作来详细说明网址:

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

请注意,定义“create_session”等操作名称会产生“非资源路径”。我建议您在routingforms上查看Rails指南,以帮助您更清楚地了解您要完成的工作。

答案 1 :(得分:0)

为此使用单独的控制器是否没有意义?我的想法只是使用第三个控制器(不是会话或用户),如“静态页面”,然后在该控制器中使用这两个操作。这似乎更符合Rails惯例,但我并不积极。