2012-10-03 4 views
3

내가 레일 v3.2.2에 루비를 사용하고 나는 믹스 인 모듈에 Active Record Association을 상태로 유효 방법이 있는지 알고 싶습니다. 왜?mixin 모듈의 Active Record Associations에 대한 유효한 접근 방법은 무엇입니까?

더 :

  1. 이 방법의 장점과 단점은 무엇인가?
  2. 내가주의를 기울여야하는 뭔가가있다? 그를 만들기 위해 몇 가지 처방은
  3. 가?

: 내 액티브 레코드 협회 관련 문은 여러 모델의 동일하기 때문에 (자신을 반복하지 마십시오) 내 코드 건조하고 싶습니다.

답변

0

는 가서 해! 귀하의 질문에 관하여 :

  • 1 : 가장 큰 장점은 중복 코드가없는 깨끗한 코드베이스를 가지고 있다는 것입니다. 내가 생각할 수있는 가장 큰 단점은 코드를 통해 누군가를 보는 것이 즉시 명백하지 않을 수 있다는 것입니다.

  • 관련 3 : included 콜백에서 또는 새 ActiveSupport::Concern 확장을 사용하여 연결을 정의해야합니다.

예 :

# using the standard include callback 
module LocationAwareness 

    def self.included(base) 
    base.has_one :location 
    end 
end 

또는 다음

# using ActiveSupport::Concern 
module LocationAwareness 
    extend ActiveSupport::Concern 

    included do 
    base.has_one :location 
    end 
end 

당신이처럼 모델에서 사용할 수 있습니다 :

class Person < ActiveRecord::Base 
    include LocationAwareness 
end 

class Gig < ActiveRecord::Base 
    include LocationAwareness 
end 

#... 

물론이 방법도 만들기 시작 더 많은 행동을 공유한다면 더 의미가 있습니다. 우리의 "단지"협회보다 ...

0

당신은 그것을 할 수 있지만, 당신은 included do...end 블록에 그 일을 처리해야합니다. 이 건성하지 않고 단지 동작을 캡슐화하기 위해, 그것은 독립적 인 모듈로 모델의 코드를 분리 할 매우 가치가있다하더라도 제 생각에는

.

관련 문제