2009-10-21 3 views
0

У меня есть родительский класс под названием Vehicle, а также несколько классов детей: автомобиль, грузовик, внедорожник. Im использует однонамерное наследование и идентификатор, как в форме, чтобы иметь возможность выбирать TYPE (автомобиль, грузовик, внедорожник), каждый из которых имеет пару связанных полей, а затем имеет рельсы для создания связанного типа. Это упорядочение становится более сложным b/c Транспортные средства принадлежат Fleets, комплекты обоих обновлены в одной и той же форме.Указание типа наследования типа типа Rails Форма

Есть ли способ переопределить атрибуты update_attributes и новые функции для использования поля типа и построить дочерние транспортные средства как части флотов?

ответ

0

Я не думаю, что это хорошая идея, чтобы переопределить их, но имейте в виду, что единственное, что отличается между этими классами (в представлении базы данных), - это поле типа.

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, вы потеряете это.

Update:

В ответ на комментарий:

Да, это потому, что тип является защищенным, который означает, что вы не можете назначить его через new(), update_attributes(), build() или любой другой метод, который позволяет сразу присваивать значения нескольким атрибутам.

Если посмотреть в код, который я сделал, я назначу его на втором ряду, то есть из-за этой «ошибки»

+0

Эй Джимми, Прямо сейчас я задаю тип в форме, проблема является контроллер выдает сообщение об ошибке «ПРЕДУПРЕЖДЕНИЕ: нельзя назначить эти защищенные атрибуты следующим образом: type», и тип фактически не сохраняется в БД. Любая идея, как это исправить? – LMH

Смежные вопросы