我有一個模型User
(用於驗證目的),它通過Rails中的多態關聯連接到另外兩個模型Customer
和Seller
。由於數據不同,客戶和銷售商必須有不同的註冊表單,但可以使用單一登錄表單,因爲它們都是Users
。爲了分別管理客戶和銷售商資源,爲他們創建相應的控制器和視圖,還是應該在UsersController
中完成所有用戶的管理?Rails多態關聯 - 控制器和視圖?
回答
正如@madyrockss指出的,STI可能是這裏的出路,因爲User.find(params [:login])會自動返回Customer或Seller的一個實例。
我會鼓勵忘記UsersController,並根據賣家和客戶控制器/視圖來鼓勵思考(也就是說,不要共享單個控制器和視圖,每個操作都可以處理客戶或銷售商,並具有條件在視圖內確定要顯示的內容)。如果這兩個用戶有不同的業務規則,那麼整個事情就會變得非常混亂,並隨着業務規則的變化而變得難以管理。
對於登錄/註銷,如果表單將是相同的兩個,然後單個控制器就足夠了,我會考慮一個不同的名稱比UsersController,如SessionsController更符合語義上的什麼控制者的目的是。您並不侷限於一對一的模式< ==>控制器< ==>許多人認爲Rails開發者陷入陷阱的觀點。
是的,我有一個SessionsController來管理登錄。但我使用UsersController來CRUD用戶。 – user3193550
這取決於兩個視圖客戶和賣方的設計。如果雙方的意見設計的不同,那麼我會鼓勵你創建兩個控制器customers_controller
和sellers_controller
,你可能希望有共同行動模塊像lib/authentication.rb
。所以
# customers_controller.rb
include Authentication
def some_action
end
和
# sellers_controller.rb
include Authentication
def other_action
end
像
# lib/authentication.rb
module Authentication
def common_method
end
end
身份驗證文件你可以有兩個控制器,哪些是你可以寫常見的實現方法具一個模塊ds/actions
- 1. Rails 3 Many.to.many關聯,關於控制器和視圖的問題
- 2. Rails 4 - 多態關聯 - 多種關聯
- 3. rails + rspec控制器規範與多態關聯
- 4. Rails多態關聯錯誤
- 5. 關閉父視圖控制器和子視圖控制器
- 6. Rails的多態關聯accepts_nested_attributes
- 7. Rails 4多態關聯has_many
- 8. Rails多態關聯has_one/belongs_to
- 9. Rails 4多態關聯和關注
- 10. 關閉模態視圖控制器
- 11. Rails多表繼承和多態關聯
- 12. Rails的:多態關聯
- 13. 多態關聯的模型和控制器設計方法
- 14. 視圖和控制器的Rails助手?
- 15. Ruby on rails控制器和視圖
- 16. Rails中的多態關聯
- 17. Rails找到關聯控制器的ID
- 18. 有多少視圖控制器太多視圖控制器?
- 19. 關閉視圖控制器從模態提供的視圖控制器翻轉
- 20. 控制器和視圖相關聯並self.method仍然混淆我
- 21. 控制器和視圖中的導軌關聯混淆
- 22. 視圖一次只能與最多一個視圖控制器關聯。 UIViewControllerHierarchyInconsistency
- 23. 視圖一次只能與最多一個視圖控制器關聯(UISegmentedControl)
- 24. Rails的多態關聯+ fields_for
- 25. Rails多態關聯has_many
- 26. Rails:包含多態關聯
- 27. 在Rails 3中爲has_many:through關係創建控制器和視圖
- 28. 委派和模態視圖控制器
- 29. 關閉視圖控制器
- 30. 關於視圖控制器
我認爲,而不是多態關聯,你應該使用單表繼承(STI)。客戶和賣方是用戶類型。然後,您可以使用單個表單來管理這兩種類型的用戶的登錄。 –
@madyrockss我看着單表繼承,但決定反對它,因爲它涉及到將一個客戶的數據放在與賣方數據相同的表中。這沒有意義,因爲我有很多不同的領域。我認爲表格會讓人困惑,我寧願將它們保留在不同的模型中,所以我選擇了多態關聯。 – user3193550