2016-09-28 2 views
0

액티브 레코드 레일 상속 - 자동 유형 캐스팅 유형에 따라


내 시나리오 -> 사용자가 많은 기계

있다 -> 각 기계 -> 기계는 5 종류의

을 가질 수 있습니다 유형에는 고유 한 처리 메커니즘이 있습니다.

-> 유형 열을 사용하여이 행이 속한 클래스를 확인하고 싶습니다. (레일 상속 접근)이 링크 Link에서 설명했다.


내 질문


-> 이

Machine.first

데이터베이스 예를 들어 기계 =에서 시스템에 액세스 -> 다음 전화 machine.process (이 과정 메소드를 호출해야한다 기반 이 기계의 유형에 따라). (어떤 유형의 캐스팅 물건을 여기에서 기대하고 있습니다.)

참고 : 각 기계 유형은 다른 것과 다른 프로세스 구현을 가지며 자체 클래스로 구현됩니다.

이 방법을 구현하는 가장 좋은 방법을 알고 싶습니다. 어떤 도움을 주셔서 감사합니다.

답변

1

개인 논리를 사용하여 공통 논리 및 하위 클래스로 부모 클래스 Machine을 구현할 수 있습니다.

rails g model machine type:string customer_id:integer 
mkdir app/models/machines 
touch app/models/machines/bmw.rb 
touch app/models/machines/renault.rb 
... 

응용 프로그램/모델/machine.rb

class Machine < ActiveRecord::Base 
    belongs_to :customer 
    ... 
    def country 
    raise NotImplementedError 
    end 
end 

응용 프로그램/모델/기계/bmw.rb

class Bmw < Machine 
    ... 
    def country 
    :germany 
    end 
end 

응용 프로그램/모델/기계/오펠. rb

예를 들어 8,753,

: 어떤 차 Machine.first

  • 받기 고객 첫번째 르노 Renault.first.customer
  • 나라 모든 자동차 Machine.all.sample.country

    • 먼저 BMW Bmw.first
    • 첫째,이 방법은 모든 자식 클래스에서 호출합니다.
  • +0

    . 기계 .first.country 어떤 방법이 호출됩니까? 기계 또는 BMW? –

    +0

    bmw. 자식 클래스가 부모 클래스에서 호출하는 메서드가 아닌 경우. –

    +0

    내 요구 사항은 다음과 같음 u.machines.each do | m | 특정 논리에 대한 #call 하위 메소드는 여기에 있습니다. # 해당 bmw 자체 메서드를 호출해야합니다. end –

    0

    Google 검색을 한 후 원하는대로 정확하게 준 보석을 찾아 낼 수있었습니다.

    active_record-acts_as 보석.내가 유용하다고

    다른 링크이었다 : 우리는 첫 번째 행 BMW 클래스 유형 인 경우 다음과 같이 할 경우

    Link1

    Link2

    Link3