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
)。似乎沒有任何工作。
任何想法?
你到底想幹什麼?你的'find'方法是設置一些類實例變量。另外,您如何設置數據庫模型以便「Guest」是一個有效的ID? –
我們正在CAS登錄中設置用戶名。 '訪客'是一個有效的用戶名。我用更多的解釋編輯了我的問題。謝謝你的幫助! – Jeremiah
我非常困惑,它可以工作。當新的'find'方法調用'find_original'時,它應該嘗試查找ID爲'user1'的記錄。除非你以一種不尋常的方式設置你的模式,或者除非你有一個ID = 0的用戶,那個調用應該會引發'ActiveRecord :: RecordNotFound' –