2014-06-19 8 views
1

데이터를 반환하기 전에 ActiveResource의 find 메서드를 내 고유 한 메서드로 별칭을 지정하여 일부 특성을 추가 할 수 있습니다.별칭 찾기 메서드가 UnauthorizedAccess 오류를 제공합니다.

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 메소드에서 User의 새 인스턴스를 만들려고 할 때 발생합니다.

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의) 슈퍼를 사용하여 시도, 나의 발견 방법 뭔가 그쪽으로 명명 한 충돌을 일으키지 않습니다 (예 : def find_blah). 아무것도 작동하는 것 같습니다.

아이디어가 있으십니까?

+0

당신이 뭘 하려는지? 'find' 메쏘드는 어떤 클래스 인스턴스 변수를 설정하고 있습니다. 또한 'Guest'가 유효한 ID가되도록 DB 모델을 어떻게 설정합니까? –

+0

CAS 로그인시 사용자 이름을 설정하고 있습니다. 'Guest'는 유효한 사용자 이름입니다. 나는 약간의 설명으로 나의 질문을 편집했다. 당신의 도움을 주셔서 감사합니다! – 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