Создание единой формы создания с использованием Single Table Inheritance в Rails - PullRequest
2 голосов
/ 26 октября 2010

Я использую STI в Rails, и у меня есть объект Vehicle, который имеет много разных типов подклассов, таких как Car, Truck и т. Д. Это для простого приложения, поэтому STI работает хорошо в этом случае, ноУ меня проблемы с созданием единой формы, в которой можно создать запись любого типа транспортного средства.

Используя следующую маршрутизацию:

resources :vehicles
resources :cars, :controller => 'vehicles'
resources :trucks, :controller => 'vehicles'

Я могу настроить / автомобили и / грузовые автомобили настроеныи оба указывают на одну и ту же форму.Однако, поскольку форма указывает на контроллер транспортных средств и генерирует объект Vehicle для формы, она не может знать, что URL / cars должен создавать объект Car.

Я пытаюсь получитьсистема маршрутизации, в которой / cars будет указывать на форму, которая по сути знает, как создать объект для формы, используя Car.new или даже Report.new (: type => "Car").Я думал о работе системы маршрутизации, такой как / vehicle /: subclass, и как-то использовал params [: subclass] в контроллере, но я также не могу понять, как сделать такую ​​маршрутизацию и все же избежать других ошибок маршрутизации, вызванных Rails'STI magic.

Я всегда мог разобрать URL, чтобы получить значение, но это кажется небезопасным и хакерским способом сделать это.

Мне любопытно, есть ли у кого-нибудь совет или опыт в Rails, как это сделать.Спасибо!

1 Ответ

0 голосов
/ 19 января 2011

Поскольку вы хотите использовать одну и ту же форму для всех транспортных средств, я предполагаю, что все поля одинаковы, кроме типа объекта. Тогда почему бы не иметь поле со списком в форме, чтобы позволить пользователю выбрать, какой тип объекта пользователь хочет создать?

Затем вы можете обработать правильный объект, сохраняемый в действии создания в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...