나는 그것들을 오버라이드하는 것이 좋은 생각이 아니지만, (데이터베이스의 뷰에서) 그 클래스들 사이에서 유일한 차이점은 타입 필드라는 것을 명심하라.
So.
car = Car.new params['Car']
car.type = params['Car']['type'] # Here you should check for valid types though
car.save
car.reload # This might work,
# or you have to re-fetch it completely to actually
# change the class of the instance.
올바른 유형을 제공한다을 업데이트하지만이 조금 더 어렵게 만들 수 있습니다 형태에 따라 별도의 유형은 있으나, 그렇지 않으면 당신은 필드를 구분하는 문제가있을 수 있습니다 (모든는 것, 자동차의해야 할 것이다 충돌).
그러나 하위 클래스에 대해서도 위의 작업을 수행하는 것은 문제가되지 않습니다. Truck.find(params['id']).becomes(Car)
을 사용하여 안전하게 재생할 수도 있지만, Truck에 대해 별도의 로직을 사용하면 느슨해집니다.
업데이트 : 주석에 대한 응답으로
:
유형은 new()
, update_attributes()
, build()
또는를 통해 할당 할 수 있다는 것을 의미 보호 속성이기 때문에 예,이입니다 한 번에 여러 속성에 값을 할당 할 수있는 다른 방법. 당신은 내가 만든 코드에서 보면, 내가 두 번째 행에 할당
, 즉이 때문에 "오류"
가
헤이 지미, 지금 내가 형태의 유형을 지정하고있어, 문제가있다 이다 컨트롤러에서 "경고 :이 보호 속성을 매스 할 수 없습니다 : 유형"오류가 발생하고 유형이 실제로 DB에 저장되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? – LMH