2013-07-05 5 views
2

레일 4에서 다소 간단한 STI를 구현하려고하지만 아직 달성 할 수없는 부분이 있습니다.Rails 4에서 단일 테이블 상속

class Person < ActiveRecord::Base 
end 

class NaturalPerson < Person 
end 

class LegalPerson < Person 
end 

class Employee < NaturalPerson 
end 

class Customer < NaturalPerson 
end 

것은이, 내가, 내가 Employee 클래스에서만 액세스 할 몇 가지 속성이 일부에만 고객에서, 등,하지만 난 찾을 수 없습니다 :

나는 다음과 같은 클래스가있다

방법. Rails 3 방식을 사용한다면 attr_accesible로 해결할 수 있습니다. 그러나 나는 attr_accesible 보석을 사용하고 있지 않으며 기꺼이하지도 않기 때문에 지금은 가능하지 않습니다.

답변

4

나는 내 컨트롤러에

def person_params 
params.require(:person).permit(:email, :last_name, :first_name) 
end 

def natural_person_params 
params.require(:person).permit(:email, :job, :location) 
end 

을 다른 person_params를 사용하고 나는 그것이 STI와 같이) 객체의 클래스 이름 또는 유형 속성을 테스트 할 사용 PARAMS를 결정하는 방법을 만들 woud. ..

희망이

건배

+0

내가 컨트롤러의 외부에있는 사람을 만들려면 무엇을 : 당신이 그들을 구분합니다

def person_params params.require(:person).permit(:email, :last_name, :first_name, :job, :location) end 

, 당신은 각 사람의 유형에 대한 별도의 PARAMS을 할 것입니다? 이것도 가능합니까? 나는 Rails에 비교적 익숙하지 않기 때문에 여기에 개념적 오류가있을 수있다. 감사! –

+0

내 의견을 다시 읽으면 분명하지 않을 수도 있습니다. 내가 말한 의미는, 컨트롤러 외부에서 NaturalPerson의 인스턴스를 처리하려면 어떻게해야할까요? NaturalPerson에 대해서만 접근 할 수있는 속성을 어떻게 정의 할 수 있습니까? ActiveRecord가 Person 속성을 처리하는 방식으로 Person의 모든 자식은 모든 속성에 액세스 할 수 있습니다. 감사!!! –

+0

잘 모르겠다. 아직 레일즈 4에서 STI를 테스트하지 않았다. – phron

3

당신이 모든 모델에 대해 하나의 컨트롤러를 사용하려는 경우는, 다음 ALL을 ATTR을 넣어하는 데 도움이 흰색으로 나열된 매개 변수로 이동합니다.

def person_params 
    params.require(:person).permit(:email, :last_name, :first_name) 
end 

def employed_person_params 
    params.require(:person).permit(:email, :job, :location) 
end