나는 자신의 테이블을 가지고있는 구체적인 모델이 자라는 AbstractRecord 모델을 가지고있다. 다음은 상속입니다. 상속이있는 경우 레일 위해서는레일즈 : self.inherited을 효과적으로 사용하는 방법
AbstractRecord < ActiveRecord::Base
Blog < AbstractRecord
Post < AbstractRecord
....
....
적절한 테이블을 찾기 위해, API 문서는 클래스 메소드의 abstract_class를 정의하는 말? 레일이 테이블을 찾지 않도록 true를 반환합니다. 내 경우, 레일스가 (일반적으로 STI에서와 같이 abstract_records 테이블 대신에) 블로그 테이블을 찾기 위해 abstract_class 메소드를 정의 했습니까? true를 돌려주는 AbstractRecord 모든 쿼리가 제대로 작동하는 것 같습니다. 하지만 Blog를 인스턴스화 할 때마다 레일은 부모 클래스가 true를 반환 할 때 콘솔에서 블로그 (추상)로 표시합니다. 이를 피하기 위해 다시 abstract_class를 정의 할 수 있습니까? 블로그 클래스에서 false를 반환합니다.
하지만 abstract_class를 정의하는 대신 생각하고 있었습니까? 모든 자식 모델에서 어떻게 든 self.inherited를 사용하고 AbstractClass 자체에서 그 메서드를 정의 할 수 있다면. 나는 여러 가지 접근 방법을 사용하려고 노력했다.
는class AbstractRecord < ActiveRecord::Base
def self.abstract_class?
true
end
def self.inherited(subclass)
super
subclass.instance_eval do
define_method(:abstract_class?) { false }
end
end
end
class AbstractRecord < ActiveRecord::Base
def self.abstract_class?
true
end
def self.inherited(subclass)
super
subclass.class_eval do
define_method(:abstract_class?) { false }
end
end
end
class AbstractRecord < ActiveRecord::Base
def self.abstract_class?
true
end
def self.inherited(subclass)
super
subclass.instance_eval do
def abstract_class?
false
end
end
end
end
class AbstractRecord < ActiveRecord::Base
def self.abstract_class?
true
end
def self.inherited(subclass)
super
subclass.class_eval do
def abstract_class?
false
end
end
end
end
내가 잘못 뭐하는 거지에 어떤 조언을 감사?
인해 '상속'메소드 이름을 마우스 오른쪽 못하고 아래로 투표! –
@BillEisenhauer 왜 투표를하지 말고 편집을 제안하는 것이 좋을까요? – Nick
@ 닉 잘 모르겠다! 거의 5 년 전에 내가했던 행동에 대해 묻고 있습니다. 그 때 편집을 제안하는 방법을 모르겠다. 아마 그 대답이 정확하지 않고 다른 사람들이 혼란스럽지 않았 음을 알고 싶었을 것입니다. –