2012-04-14 3 views
2

클래스 메소드를 공유해야하는 Ruby on Rails에 여러 Active Record 데이터 모델이 있습니다. 모든 클래스에서 메서드를 쉽게 선언 할 수 있지만 DRY 원칙에 위배됩니다.Rails에서 여러 데이터 모델간에 클래스 메서드를 공유하는 방법은 무엇입니까?

나는 모듈을 선언하고 'include'를 사용하여 코드를 혼합 해 보았지만 클래스 메소드가 아닌 인스턴스 메소드에서만 작동하는 것으로 보인다.

Ruby/Rails에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까? (나는 기본 ActiveRecord 클래스를 만들고 그 클래스로부터 상속 받았다. 그러나 ActiveRecord는 놀라움을 금치 못했다.)

답변

3

ClassMethods 관용구는 모듈이 모두 클래스 및 인스턴스 방법을 제공하기위한 일반적인 방법입니다 : http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/

당신은 추상 기본 클래스를 만드는 경우 액티브는 당신이 그 클래스에 self.abstract_class = true 전화로, 흥분하지 말아야 : http://api.rubyonrails.org/classes/ActiveRecord/Inheritance/ClassMethods.html

+0

빙고! self.abstract_class = true는 제가 실종 된 것입니다. 감사. –

2

include 대신 모듈 extend을 사용하십시오. 그것은 인스턴스 메소드 대신 클래스 메소드에서 혼합됩니다.

또는 기본 모델을 ActiveRecord::Base에서 상속받을 수 있으며이 기본 모델로부터 모든 상속 모델을 상속받을 수 있습니다. ActiveRecord가 괴롭히지 않아야합니다.

+0

상속을받을 수 없습니다. 예 : 클래스 Foo

+0

나는 이것이 당신이 필요로하는 대답이라고 생각합니다. 이것은 ActiveRecord와 관련이 없지만 Ruby의 선반과 관련이 있습니다. 일반적인 방법을위한 루비 모듈을 만들고 그것들로부터'extend'을 시도하십시오. – fguillen

+0

레너드, 테이블에 테이블 이름을 선언해야합니다. – cpuguy83

관련 문제