0

我有一個模型User(用於驗證目的),它通過Rails中的多態關聯連接到另外兩個模型CustomerSeller。由於數據不同,客戶和銷售商必須有不同的註冊表單,但可以使用單一登錄表單,因爲它們都是Users。爲了分別管理客戶和銷售商資源,爲他們創建相應的控制器和視圖,還是應該在UsersController中完成所有用戶的管理?Rails多態關聯 - 控制器和視圖?

+0

我認爲,而不是多態關聯,你應該使用單表繼承(STI)。客戶和賣方是用戶類型。然後,您可以使用單個表單來管理這兩種類型的用戶的登錄。 –

+0

@madyrockss我看着單表繼承,但決定反對它,因爲它涉及到將一個客戶的數據放在與賣方數據相同的表中。這沒有意義,因爲我有很多不同的領域。我認爲表格會讓人困惑,我寧願將它們保留在不同的模型中,所以我選擇了多態關聯。 – user3193550

回答

0

正如@madyrockss指出的,STI可能是這裏的出路,因爲User.find(params [:login])會自動返回Customer或Seller的一個實例。

我會鼓勵忘記UsersController,並根據賣家和客戶控制器/視圖來鼓勵思考(也就是說,不要共享單個控制器和視圖,每個操作都可以處理客戶或銷售商,並具有條件在視圖內確定要顯示的內容)。如果這兩個用戶有不同的業務規則,那麼整個事情就會變得非常混亂,並隨着業務規則的變化而變得難以管理。

對於登錄/註銷,如果表單將是相同的兩個,然後單個控制器就足夠了,我會考慮一個不同的名稱比UsersController,如SessionsController更符合語義上的什麼控制者的目的是。您並不侷限於一對一的模式< ==>控制器< ==>許多人認爲Rails開發者陷入陷阱的觀點。

+0

是的,我有一個SessionsController來管理登錄。但我使用UsersController來CRUD用戶。 – user3193550

1

這取決於兩個視圖客戶和賣方的設計。如果雙方的意見設計的不同,那麼我會鼓勵你創建兩個控制器customers_controllersellers_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