2015-01-16 31 views
0

目前我在列出10.22在railstutorial.org書籍中。當我按照上市10.22的例子並輸入到user.rb文件這2表示1個參數錯誤Railstutorial.org部分10.22

# Returns true if the given token matches the digest. 
def authenticated?(attribute, token) 
    digest = send("#{attribute}_digest") 
    return false if digest.nil? 
    BCrypt::Password.new(digest).is_password?(token) 
end 

我的測試套件應該拋出一個2 1參數錯誤。它甚至沒有通過身份驗證?只需要在sessions_helper.rb文件1個論點:

# Returns the current logged-in user (if any). 
def current_user 
    if (user_id = session[:user_id]) 
    @current_user ||= User.find_by(id: user_id) 
    elsif (user_id = cookies.signed[:user_id]) 
    user = User.find_by(id: user_id) 
    if user && user.authenticated?(cookies[:remember_token]) 
     log_in user 
     @current_user = user 
    end 
    end 
end 

而且,當我在2個參數添加按照指令:

# Returns the current logged-in user (if any). 
def current_user 
    if (user_id = session[:user_id]) 
    @current_user ||= User.find_by(id: user_id) 
    elsif (user_id = cookies.signed[:user_id]) 
    user = User.find_by(id: user_id) 
    if user && user.authenticated?(:remember, cookies[:remember_token]) 
     log_in user 
     @current_user = user 
    end 
    end 
end 

它拋出一個2 1的錯誤,我的測試套件是紅色的,而指示說它應該是綠色的。這是書中的錯誤嗎? 此外,當我編輯user_test.rb文件,內容如下:

test "authenticated? should return false for a user with nil digest" do 
    assert_not @user.authenticated?(:remember, '') 
end 

束EXEC耙測試拋出3個錯誤。

+0

很有可能你有兩種版本的'authenticated?'方法 - 一個採用單個參數,另一個採用兩個參數 - 在同一個文件中定義。當一個方法被定義兩次時,最後一個覆蓋第一個。我的猜測是''authenticated?(attribute,token)'在'user.rb'文件中'authenticated?(remember_token)'的上面被定義,這就是導致這種行爲的原因。 –

+0

很高興爲您提供幫助:-)添加了同樣的答案,爲他人帶來的好處。 –

回答

0

原來,authenticated?(attribute, token)被定義在authenticated?(remember_token)以上user.rb文件中,那是什麼導致了這種行爲。

相關問題