2011-03-02 180 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約定,但我不積極。