這讓我瘋狂!我有兩個型號Lion
和Cheetah
。兩者都從Wildcat
繼承。Rails 4.0中的路徑,路徑助手和STI
class Wildcat < ActiveRecord::Base; end
class Lion < Wildcat; end
class Cheetah < Wildcat; end
STI在這裏使用。
他們都通過控制器WildcatsController
處理。在那裏,我有一個before_filer
以獲得來自params[:type]
的wildcat的type
以及所有其他的東西來使用正確的類。
在我routes.rb
,我創建了以下路線:
resources :lions, controller: 'wildcats', type: 'Lion'
resources :cheetahs, controller: 'wildcats', type: 'Cheetah'
如果我現在想用的路徑幫手,我從路線(lions_path
,lion_path
,new_lion_path
等)得到,一切都按照預期工作,除了show
和new
路徑。例如lions_path
返回路徑/lions
。 new
路徑返回/lions/new?type=Lion
。與show
路徑相同。當我嘗試向我的根域輸入/lions/new
時,它正確地在後臺添加了類型參數。
所以,我的問題是,爲什麼Rails將type
參數添加到url,如果我使用路徑助手?爲什麼只爲new
和show
?
我使用新鮮的Rails應用程序在Ruby 2.0中運行Rails 4.0.0。
天啊。它可以是那麼簡單。感謝您的快速回答!我只是不想爲每個模型創建控制器,因爲將來會有堆控制器。但是那解決了它! – Hiasinho
我的榮幸。這是OOP的力量:)。請注意模板將是wildcats'。如果您想在索引中使用Lion自己的說法,只需在LionsController中添加一個空白的索引方法即可。但我認爲一般觀點在大多數情況下可以做很多工作。 –
@Hiasinho,忘記添加'singularize'。這個解決方案對路徑有一點依賴性,但是一旦路徑改變,你應該能夠克服它。 –