2014-06-19 31 views
1

我使用自己的自定義方法別名ActiveResource的find方法,以便在返回數據之前添加一些屬性。別名find方法給出Unauthorized Access錯誤

class User < ActiveResource::Base 
    class << self 
    alias_method :find_original, :find 

    def find(username='Guest') 
     @user_info = find_original(username) 
    end 
    end 
end 

上面的代碼在100%的時間內工作得很好。當我嘗試在find方法中創建用戶的新實例時,會發生此問題。

class User < ActiveResource::Base 
    class << self 
    alias_method :find_original, :find 

    def find(username='Guest') 
     @user_info = find_original(username) 
     @user = new(username: username, user_settings: {}) 
    end 
    end 
end 

編輯:

此代碼只適用於第一個用戶名我把它:

User.find('user1') 
=> #<User:0x007fab51df5990 @attributes={"username"=>"user1", "user_settings"=>#  <User::UserSettings:0x007fab51dfe2e8 @attributes={}, @persisted=false, @prefix_options={}>}, @persisted=false, @prefix_options={}> 

如果我嘗試在同一會話中使用任何其他的用戶名,我得到這個錯誤:

User.find('user2') 
ActiveResource::UnauthorizedAccess: Failed. Response code = 401. Response message = [ISS.0084.9001] Invalid credentials. app/models/user.rb:21:in `find' 

我已經嘗試使用超級(而不是alias_method),並命名我的find方法的東西t不會產生任何衝突(如def find_blah)。似乎沒有任何工作。

任何想法?

+0

你到底想幹什麼?你的'find'方法是設置一些類實例變量。另外,您如何設置數據庫模型以便「Guest」是一個有效的ID? –

+0

我們正在CAS登錄中設置用戶名。 '訪客'是一個有效的用戶名。我用更多的解釋編輯了我的問題。謝謝你的幫助! – Jeremiah

+0

我非常困惑,它可以工作。當新的'find'方法調用'find_original'時,它應該嘗試查找ID爲'user1'的記錄。除非你以一種不尋常的方式設置你的模式,或者除非你有一個ID = 0的用戶,那個調用應該會引發'ActiveRecord :: RecordNotFound' –

回答

0

正如我在評論中指出的,我不確定你在做什麼。但是,也許你正在試圖做到這一點:

User.where(username: username).first_or_initialize 

或者在一個方法來包裝這個:

class User 
    def self.custom_find(username='Guest') 
    where(username: username).first_or_initialize 
    # or where(id: username).first_or_initialize 
    end 
end