2

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

使用以下路由:

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

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

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

我总是可以解析 URL 以获取值,但这似乎是一种不安全且不可靠的方法。

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

4

1 回答 1

0

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

然后,您可以在控制器的创建操作中处理适当的持久对象。

于 2011-01-19T18:15:05.400 回答