在我的模特中,我像这样使用STI
车辆型号:vehicle.rb
class Vehicle < ActiveRecord::Base
end
车型:car.rb
class Car < Ad
end
总线型号:bus.rb
class Bus < Ad
end
哪种方法只使用一个控制器?
由于
答案 0 :(得分:2)
在我看来,最好的方法是这样做:(我不确定这是否是最好和更有效的方式)
首先。添加一些新路线:
resources :cars, :controller => "vehicle", :type => "Car"
resources :buses, :controller => "vehicle", :type => "Bus"
向控制器添加一个私有方法,将类型参数转换为您想要使用的实际类常量:
def vehicle_type
params[:type].constantize
end
然后在您可以执行的控制器操作中:
def new
vehicle_type.new
end
def create
vehicle_type.new(params)
# ...
end
def index
vehicle_type.all
end
<强> URLS 强>
<%= link_to 'index', :cars %>
<%= link_to 'new', [:new, :car] %>
<%= link_to 'edit', [:edit, @vehicle] %>
<%= link_to 'destroy', @vehicle, :method => :delete %>
是多态的:)
<%= link_to 'index', @vehicle.class %>
PS:我的回答取自stackoverflow.com/questions/5246767/sti-one-controller和我的经验