我正在研究一個相對簡單的個人項目,並決定使用STI應該適合我的需求。這是我第一次使用STI,但我想知道是否可以爲每個從父模型繼承的模型使用單獨的控制器?對單表繼承使用多個控制器?
我有一種感覺,答案將取決於用例,所以我應該問自己什麼問題才能得出使用單獨的控制器或僅使用一個控制器的結論?
我正在研究一個相對簡單的個人項目,並決定使用STI應該適合我的需求。這是我第一次使用STI,但我想知道是否可以爲每個從父模型繼承的模型使用單獨的控制器?對單表繼承使用多個控制器?
我有一種感覺,答案將取決於用例,所以我應該問自己什麼問題才能得出使用單獨的控制器或僅使用一個控制器的結論?
在定義控制器時,您可以對STI模型使用相同的層次結構。
比方說,你有users
表與STI車型代表它User
ActiveRecord的模型:Admin
(類型: '管理員')和Member
(型號: '會員')。試試這個:
型號:
app/models
├── user.rb
├── admin.rb
└── member.rb
class User < ActiveRecord::Base
end
class Admin < User
end
class Member < User
end
控制器:
app/controllers
├── users_controller.rb
├── admins_controller.rb
└── members_controller.rb
class UsersController < ApplicationController
end
class AdminsController < UsersController
end
class MembersController < UsersController
end
控制器訪問提供對外部世界的 「接口」。所以它應該匹配所需的訪問。
單個控制器(用於用戶管理)的示例將用於具有子模型Teacher,Student,Admin的父級用戶模型。在這種情況下,所有3個孩子可能會以相同的方式進行CRUD,但視圖略有不同,因此單個控制器將可以工作。
如果您必須在控制器操作中開始編寫幾條if this_model ...
語句,請考慮使用單獨的控制器。
決定?我建議儘可能避免性傳播感染,因爲如果你能分享從這個結論得出的結果,那麼它很快就會比以後複雜化,那麼我們可能會幫助更好。另外,請發佈一些示例/代碼來處理。 – Surya
我已經完成了這兩種方式,並且在每種情況下都找到了詛咒自己的理由。我會堅持使用單獨的控制器,並利用控制器的關注點來保持控制器級的乾燥。 – dstull