Rails多态关联 - 控制器和视图?

时间:2014-01-22 19:46:16

标签: ruby-on-rails model-view-controller ruby-on-rails-4 polymorphism polymorphic-associations

我有一个模型User(用于身份验证),它通过Rails中的多态关联连接到另外两个模型CustomerSeller。客户和卖家必须拥有不同的注册表单,因为他们的数据不同,但可以使用单一登录表单,因为它们都是Users。为了分别管理客户和卖方资源,为它们创建相应的控制器和视图是一个好主意,还是应该在UsersController中完成对所有用户的管理?

2 个答案:

答案 0 :(得分: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

您可以拥有两个控制器和一个可以编写常用方法/操作的模块

答案 1 :(得分:0)

正如@madyrockss指出的那样,STI可能就是这里的一种方式,因为User.find(params [:login])将自动返回Customer或Seller的实例。

我鼓励忘记用户控制器和视图,并鼓励在卖方和客户控制器/视图方面进行思考(也就是说,不要共享单个控制器和每个操作的视图,这些操作可以处理客户或卖方,并且具有条件查看确定要显示的内容。如果这两个用户具有不同的业务规则,那么整个事情就会变得非常混乱,并且随着业务规则的变化而变得难以管理。

对于登录/注销,如果表单对两者都相同,那么单个控制器就足够了,我会考虑一个与UsersController不同的名称,比如SessionsController在语义上更符合控制器的含义目的是。您并不局限于一对一的模型< ==>控制器< ==>许多开始Rails开发人员的观点陷入了陷阱。