2010-04-26 80 views
0

請幫我理解一下。在UsersController Authlogic例如,它總是使用@current_user,所以例如:Authlogic - current_user或@current_user?

def show 
    @user = @current_user 
end 

(從http://github.com/binarylogic/authlogic_example/blob/master/app/controllers/users_controller.rb拍攝)

這是爲什麼?在我的控制器中,我只使用current_user而不是@current_user

除此之外 - Authlogic對我來說非常適合,但我沒有看到魔術柱被填充(如last_login_atlast_login_ip)。除了加入遷移之外,我是否應該以某種方式初始化它們?

UPD 經過一番研究,我發現,如果是隻有場last_login_at和「魔場」 last_login_ip,那麼他們將不會被填充。如果我添加一整套魔術場,它的工作是完美的。

UPD2 關於CURRENT_USER我擔心的是隻有約UsersController:它爲什麼@current_user而不是current_user

+1

檢查用戶模型中是否有attr_accessible。如果你有一個,你需要列出這些字段。 – Sohan 2010-04-27 03:47:39

+0

我沒有任何attr_accessible屬性,只有「acts_as_authentic」。 – Vitaly 2010-04-27 14:36:19

+0

關於爲什麼@current_user而不是current_user,你應該問作者?這是一個明顯的缺陷。它應該是current_user,因爲如果未初始化@current_user將不起作用。 – jigfox 2010-05-06 19:33:45

回答

1

current_user通常爲app/controllers/application_controller.rb定義的方法,其設置,如果它尚未定義的@current_user實例變量 - 在這裏是一個例子:

def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
    end 

    def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.record 
    end 

重新「魔術列」時,這些應設置通過Authlogic自動。例如,如果用戶的用戶會話控制器日誌:

@user_session = UserSession.new(params[:user_session]) 
@user_session.save 

Authlogic應該爲你寫的last_login_atlast_login_ip屬性。更多的信息在Authlogic docs下Module:Authlogic :: Session :: MagicColumns

+0

是的,current_user是ApplicationController中定義的一個方法。這並沒有回答爲什麼UsersController使用@current_user。至於last_login_at和last_login_ip - 開發環境是否有任何設置不填充它們?我完全按照例子設置它們。 – Vitaly 2010-04-26 21:37:01

+0

current_user是一個幫助程序方法,用於跟蹤當前登錄的用戶。@current_user是一個與模型交互的實例變量。他們完全不同。 – 2010-04-27 06:57:08

+0

我明白不同之處。我沒有得到的是如何在UsersController中初始化@current_user? – Vitaly 2010-04-27 14:34:04

0

我覺得這個例子中的代碼並不是一個很好的例子。

您不應該使用@current_user來設置@user變量。因爲如果在UserController的show動作之前沒有調用ApplicationController#current_user方法,它將不起作用。在current_user被調用一次後,基本上它們都完全相同。

用戶控制器看起來應該像這樣

class UserController < ApplicationController 
    def show 
    @user = current_user 
    end 
end 

至於魔術欄目我不知道他們爲什麼不爲你工作。

+0

是的,這是我的想法。但是,上面的代碼工作,它是authlogic的標準示例。這不是我的代碼。 – Vitaly 2010-04-27 14:34:58

+0

是的,它是在這個例子中,但它是一個不好的例子,它應該是@user = current_user – jigfox 2010-05-06 19:35:50

1

至於last_login_at和last_login_ip,你的表中有current_login_at和current_login_ip字段嗎? last_login_at和last_login_ip在重置之前使用current_login_at和current_login_ip的值設置。

+0

啊,這是有道理的。我在UPD中寫道,它使用了全套魔術字段。現在對我來說很有意義!謝謝:)他們應該已經添加到文檔中。 – Vitaly 2010-05-21 18:26:58