나는이 STI 구현이 있습니다레일 STI : 예상대로 호출되지 않는 서브 클래스의 방법
class Instruction < ActiveRecord::Base
def get_view
return "I'm a pseudo abstract base method!"
end
end
class SCreateWebPage < Instruction
def get_view
return "I'm doing terribly important things!"
end
end
나는이 (가) 명령 클래스에 다음과 같은 추가 한 : ======
def self.inherited(child)
child.instance_eval do
def model_name
Instruction.model_name
end
end
super
end
%w(S_create_web_page).each {|r| require_dependency r } if Rails.env.development?
을 ===
내 데이터베이스 테이블에 유형 열에 서브 클래스 이름을 올바르게 저장하고있는 것으로 보입니다. 서브 클래스가로드되었는지 확인했습니다 :
,(rdb) Module.const_get("SCreateWebPage")
SCreateWebPage(id: integer, name: string, code: string, skwerkflow_id: integer, created_at: datetime, updated_at: datetime, factory_id: integer, type: string)
===========
상기 방법은 get_view Instruction.rb의 생성 방법이라한다. 이 특정 지침 각각은 자신의 견해를 가질 수 있다고 생각합니다. get_view는 메타 프로그래밍 약간 호출 할 수있는 권리보기를 함께 넣어하는 것입니다.
문제 : 나는 명확하게 인스턴스화 서브 클래스로 저장 한 명령에 get_view를 호출 할 때, 그것은 서브 클래스의 메소드를 호출하는 대신 기본 클래스 호출 아니에요 :
[30, 39] in /Users/alexedelstein/dev/skwerl/app/models/instruction.rb
30 end
31
32 #overridden by subclass to help controller find the right class-specific view.
33 def get_view
34 debugger
=> 35 return "I'm a pseudo abstract base method!"
36 return nil
37 end
38
39 debugger
(rdb:13) self
#<Instruction id: 87, name: "Create Web Page", code: nil, skwerkflow_id: 38, created_at: "2013-07-18 01:00:40", updated_at: "2013-07-18 01:00:40", factory_id: nil, type: "SCreateWebPage">
를 ====== ========
이 숨어 년 후 스택 오버플로 내 첫 포스팅은, 그래서 나를 부드럽게 아름다움을 빼앗다하시기 바랍니다. 건배.
어떻게 개체를 만드는을? 데이터베이스에서 다시로드하면됩니다. –