在Rails中使用单表继承创建单个创建表单

时间:2010-10-26 02:25:53

标签: ruby-on-rails forms routing subclass single-table-inheritance

我在Rails中使用STI,并且我有一个Vehicle对象,它有许多不同类型的子类,如Car,Truck等。这是一个简单的应用程序,所以STI在这种情况下工作正常,但是我在创建单个表单时遇到问题,可以创建任何类型的Vehicle记录。

使用以下路由:

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

我可以设置/ cars和/ truck路由,并且都指向相同的表单。但是,由于表单指向车辆控制器,并为表单生成Vehicle对象,因此无法知道/ cars url应该创建Car对象。

我正在尝试设置路由系统,其中/ cars将指向一个表格,该表单本质上知道使用Car.new或甚至Report.new(:type =>“为表单创建对象汽车”)。我考虑过使用像/ vehicles /:subclass这样的路由系统,并在控制器中使用params [:subclass],但我也无法弄清楚如何进行这种路由并仍然避免Rails引起的其他路由错误'STI魔术。

我总是可以解析URL以获取值,但这似乎是一种不安全和黑客的方式。

我很好奇是否有人对Rails方式有任何建议或经验。谢谢!

1 个答案:

答案 0 :(得分:0)

由于您想对所有车辆使用相同的表格,因此我假设除了对象类型之外所有字段都相同。那么为什么表单中没有一个组合框允许用户选择用户想要创建的对象类型?

然后,您可以在控制器的create动作中处理持久的正确对象。