2016-03-04 17 views
1

假設我有Pet s和Cat s。貓在type列中存儲在值爲'Cat'的pets表中。如何忽略link_to helper中模型的類型列

比方說,我創建這樣一個鏈接:

link_to 'My Pet', Pet.find(1) 

這將使用預期pet_path生成的鏈接。

但隨後讓我們說我創建這樣一個鏈接:

link_to 'My Pet', Cat.find(1) 

,這將產生使用「cat_path」,這是聰明的一個環節,但不是我想要的東西,因爲我只有/需要PetController 。

顯然,我只能在link_to中使用pet_path(Cat.find(1)),但我想知道是否有更強大的解決方案。如果我有狗,鳥等?我不想記住每次都明確使用pet_path

如何確保第二個鏈接將創建與pet_path前進的鏈接?是否有貓模型或寵物模型的設置或我可以放在routes.rb到確保這?

CNC中

有過什麼,我想實現一些混亂。我只是想知道如何確保對Cat對象的link_to調用將解析爲pet_path而不是cat_path。我不想找到一種方法來改變我的表格的設置。在理想情況下,我不必爲不同的寵物類型創建一堆控制器。我想知道是否有一種簡單,優雅的方式來告訴Rails在確定url helper時使用父類作爲模型。

+0

貓與貓有什麼不同?如果你期望未來有更多的寵物,爲什麼不做一個「貓」課? –

+0

聽起來像你有兩個模型使用相同的數據庫表?如果你的問題只是路由助手,你可以簡單地定義'cat_path'和其他與貓相關的helper,並將它們路由到PetController中的動作(如果你有REST動作,你可以執行'resources:cats,controller:' pet'')。或者有一個基本的PetController,然後定義CatController,DogController等作爲派生類,以保持代碼乾爽。很大程度上取決於你的個人喜好和你想達到的目標。 – taglia

+0

我想要實現的是確保對cat對象的link_to調用將通過pet_path。我沒有Rails試圖聰明一點,並生成一個cat_path。 –

回答

0

您可以創建定製路由手動

get 'cats/:id' => 'pets#show' 
put 'cats/:id' => 'pets#update' 
delete 'cats/:id' => 'pets#destroy' 
# etc etc 
... 

或使用資源

resources :cats, controller: 'pet' 

略你的問題的範圍之內,但創建行動可能測試網址request.original_url,知道什麼樣的根據使用POST命令調用的路徑創建寵物。