10

나는 다음과 같이 대략 보이는 ActiveSupport :: 우려 모듈이 ActiveRecord 클래스에 포함되므로 enum을 사용하십시오. 기본적으로 ActiveRecord::Enum.enum에 의해 생성되는 declined!accepted! 메서드를 재정의하고 내 자신의 사용자 지정 논리를 추가로 사용합니다.재정의 방법은

@model.declined!을 호출 할 때 declined!의 원래 구현을 호출하고 내 사용자 지정 메서드를 무시하기 때문에 문제가 발생합니다. 내 사용자 지정 방법이 포함 된 블록이 실행되는 전에 호출 클래스 에 포함되고있는 것처럼

은 같은데 - 대신 다른 방법으로 주위의, 내 사용자 지정 방법 enum에 의해 정의 된 것들에 의해 무시되고있는 것을 의미한다.

이 특별한 상황에서 몇 가지 간단한 해결 방법이 있습니다 (예 : enum을 포함하는 클래스로 다시 전화하여 include MyModel::Acceptance 라인 위에 있는지 확인할 수는 있지만 계속 유지하면서이 문제를 해결할 수있는 방법이 있는지 궁금합니다. 같은 모듈에서 모두.

내가 인스턴스 메소드를 정의 included 내에서 클래스 메소드를 호출 할 수있는 방법이 있나요, 다음 같은 Concern 모듈 내에서 해당 인스턴스의 메소드를 오버라이드 (override)?

답변

8

을 당신이 것 같아요 define_method을 찾고 있습니다.

+0

왜 이것이 효과가 있을까요? Rails 3.2에서 @ GeorgeMillo는 잘 작동합니다. Rails 4.2에서는 그렇지 않습니다. 그들은 방법이 추가되는 방법에 대해 내부적으로 어떤 것을 바꿨습니까? –

+0

방금 ​​질문을 다시 읽었습니다. 거기에 설명이 있습니다. 그러나 추가 정보는 감사하게 받아 들여질 것입니다 :) –