0

약간의 문제가 있습니다.레일즈 응용 프로그램 컨트롤러 메서드가 자식에서 정의되지 않았습니다

나는과 같이 규정 된 다음과 같은 컨트롤러가 :

class ApplicationController < ActionController::Base 
attr_accessor :perms 
helper_method :set_permissions 

    def set_permissions *permissions 
    self.perms = permissions 
    end 
end 

class ApiController < ApplicationController 

    set_permissions :api 

end 

class Api::TokenController < ApiController 

    set_permissions :none 

end 

레일 set_permissions 그것이 상속 체인에 분명 거기에도 불구하고 존재하지 않는 생각하는 것 같다 (I 심지어 도우미 메서드로 설정).

TokenController에서 오류가 발생합니다.

또한 솔직히 이전에 작동하지 않았기 때문에 도우미 메서드로 넣었습니다. 고칠 수도 있다고 생각했습니다.

내가 뭘 잘못하고 있니?

p.s. 내가 api 디렉토리에 있기 때문에 API 컨트롤러에 Api::을 추가하려고 시도했지만 그것은 아무것도하지 않습니다.

편집 : 죄송합니다, 잘못된 컨트롤러, 더 많은 관심을 기울여야합니다.

편집은 다음 ApplicationController와 서브 컨트롤러에 set_permissions의 DEF 아래 : 좋아, 그래서 다음 코드를 넣어

ap 'ApplicationController responds' 
ap self.respond_to?(:set_permissions) 

하고 그들 모두에 대해 거짓 반응, 그것은 그렇게 정의되는 것 무슨 일이야?

p.s. ap는 awesome_print입니다.

편집 : 그래서,이 포착되고있어 self.def set_permissions에 지금 추가,하지만 지금은

undefined method `perms=' for ApiController:Class 

편집을거야 : 나는에 투입하는 것을 잊지 않았다, 나는 @self.을 변경하고 그것은 provlem 고정 코드를 업데이트 내가 attr_accessor했다 코드 (이를 표시합니다. 컨트롤러가 attr_accessor 또는 뭔가를해야만 싫어합니까?

+1

당신은'set_permisions'과'set_permissions' 사이에 차이가 있습니까? –

+0

죄송합니다. 맞춤법 오류를 발견하지 못했습니다. 감사합니다. – Thermatix

+0

해결 했습니까? –

답변

1

당신은 ApplicationController의 인스턴스 방법으로 set_permission 방법을 정의, 당신은 클래스 메소드로 호출 할 때 . 당신은이 클래스를 프라이빗 클래스 메쏘드로 정의해야 할 수도 있습니다 :

+0

그게 실제로 작동하지 않을거야, 나는 컨트롤러 상속 수준 (또는 컨트롤러 당)마다 다른 권한을 설정할 수 있어야합니다. 그래서 각 컨트롤러에 대한 메서드를 정의하지 않고 상속 된 메서드를 사용하여 컨트롤러별로 설정하려고합니다. – Thermatix

+0

@ user3536548 내 대답을 편집했습니다. –

+0

이것은 거의 답입니다. 기본적으로 싱글 톤과 같은 메서드를 정의하고 사용해야했습니다. – Thermatix