子类化用户模型在Rails中真的很糟糕吗?

Fir*_*lem 9 ruby model ruby-on-rails subclassing

我从Rails得到了很多回击,因为我将User子类化为许多不同的子类.在我的应用程序中,并非所有用户都是平等的 实际上有很多模型对象,并不是每个用户类型都可以访问它们.

我还需要一种方法来做多态行为.例如,许多方法的行为会有所不同,具体取决于类型.这不是多态性的意思吗?

但事实是,我总是从Rails回来.默认值 - 特别是表单提交给参数哈希的方式 - 似乎像非子类模型一样工作.链接和参数哈希只是默认设置真正咬你的两种方式.

在Rails中为不同类型的用户处理复杂逻辑的"正确"方法是什么?在Java中,子类化模型可以工作 - 您不必通过箍来使其按照您希望的方式工作.但是在Rails中,很难让子类使用REST约定,它会在你忘记包含:as => :user时惩罚你,或者当你在链接中放入子类对象时惩罚你,例如edit_user_path(@user)< - 坏主意!

还有一个区域也很难处理.假设我有一个Company模型,它有很多Users.这些用户可以是导演,教师,学员等 - 所有不同的子类.

当我们创建帐户时,我们可能想要使用accepts_nested_attributes_for :users.但是,如果我们使用它,我们不能指定它创建的类.血淋淋的地狱!

似乎Rails中的所有内容都不希望您将模型子类化.如果你没有子类,一切都"正常".但如果你是子类,那你就是为了地狱.

解决办法是什么?

Ari*_*sso 3

一般来说,Ruby 中不鼓励继承,而支持混入行为和委托。Ruby 和 Rails 可以做到这一点,但它往往会导致你提到的推回

您的特定示例听起来像是委托的情况:有一个属于员工的 User 类(反之亦然)。该员工(例如主管、讲师等)的特定类型行为都属于该特定员工类别。然后用户将如何处理特定场景委托给与其加入的员工