正如@madyrockss指出的那样,STI可能就是这里的方式,因为User.find(params [:login])将自动返回Customer或Seller的实例。
我鼓励忘记用户控件和视图,并鼓励在卖家和客户控制器/视图方面进行思考(也就是说,不要共享一个控制器和每个可以处理客户或卖家的操作的视图,并且在视图中有条件确定什么显示)。如果这两个用户具有不同的业务规则,那么整个事情就会变得非常混乱,并且随着业务规则的变化而变得难以管理。
对于登录/注销,如果表单对两者都相同,那么单个控制器就足够了,我会考虑使用与UsersController不同的名称,例如SessionsController在语义上更符合控制器的用途。您并不局限于一对一的模型< ==>控制器< ==>许多开始Rails开发人员的观点陷入了陷阱。
这取决于客户和卖家两种观点的设计。如果两个视图的设计不同,那么我将鼓励您创建两个控制器 customers_controller 和 sellers_controller 并且你可能想要一个用于常见操作的模块 lib/authentication.rb 。所以
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
您可以拥有两个控制器和一个可以编写常用方法/操作的模块