2011-03-02 182 views
0

这有点违反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 =>这些形式的东西,但我不确定如何指定。

within routes.rb我还没有指定用户或UserSessions作为资源(不相信这是最好的方式来做到这一点,但我可以)。

我想,但是,注册和登录在同一页上,并通过执行以下操作来实现这一点:

的routes.rb

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

什么是去解决它的最好方法?

回答

2

在您的形式,你可以通过做这样的事情specificy的网址:

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

要知道,定义诸如“建立事务”的动作名称,使对“非足智多谋的路线。”我建议您参考routingforms上的Rails指南,以帮助您更清楚地了解您要完成的任务。

0

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