STI和控制器

时间:2011-07-29 22:46:01

标签: ruby-on-rails ruby ruby-on-rails-3

在我的模特中,我像这样使用STI

车辆型号:vehicle.rb

class Vehicle < ActiveRecord::Base
end

车型:car.rb

class Car < Ad
end

总线型号:bus.rb

class Bus < Ad
end

哪种方法只使用一个控制器?

由于

1 个答案:

答案 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和我的经验