2011-07-29 62 views
1

在我的模型使用STI這樣STI和控制器

車輛型號:vehicle.rb

class Vehicle < ActiveRecord::Base 
end 

汽車模型:car.rb

class Car < Ad 
end 

巴士模型:bus.rb

class Bus < Ad 
end 

這是最有效的方法只使用一個控制器?

感謝

+0

你能解釋一下你想什麼在控制器中做什麼? –

+0

這是否回答你的問題? http://stackoverflow.com/questions/5246767/sti-one-controller – Karl

+0

我認爲是的。有人能爲Model的表格提供一個例子嗎?另一個問題是我現有的鏈接是否有效?例如'vehicles_path'? – Immo

回答

2

在我看來,最好的辦法是做這樣的:(我不知道這是否是最好的,更有效的方式)

第一。添加一些新航線:

resources :cars, :controller => "vehicle", :type => "Car" 
resources :buses, :controller => "vehicle", :type => "Bus" 

添加一個私有方法來你的控制器到您的Param類型轉換爲實際的類常量要使用:

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採取和我的經驗