我有一个模型User
(用于身份验证),它通过Rails中的多态关联连接到另外两个模型Customer
和Seller
。客户和卖家必须拥有不同的注册表单,因为他们的数据不同,但可以使用单一登录表单,因为它们都是Users
。为了分别管理客户和卖方资源,为它们创建相应的控制器和视图是一个好主意,还是应该在UsersController
中完成对所有用户的管理?
答案 0 :(得分:1)
这取决于客户和卖家两种观点的设计。如果两个视图的设计不同,那么我建议您创建两个控制器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
您可以拥有两个控制器和一个可以编写常用方法/操作的模块
答案 1 :(得分:0)
正如@madyrockss指出的那样,STI可能就是这里的一种方式,因为User.find(params [:login])将自动返回Customer或Seller的实例。
我鼓励忘记用户控制器和视图,并鼓励在卖方和客户控制器/视图方面进行思考(也就是说,不要共享单个控制器和每个操作的视图,这些操作可以处理客户或卖方,并且具有条件查看确定要显示的内容。如果这两个用户具有不同的业务规则,那么整个事情就会变得非常混乱,并且随着业务规则的变化而变得难以管理。
对于登录/注销,如果表单对两者都相同,那么单个控制器就足够了,我会考虑一个与UsersController不同的名称,比如SessionsController在语义上更符合控制器的含义目的是。您并不局限于一对一的模型< ==>控制器< ==>许多开始Rails开发人员的观点陷入了陷阱。