我受到 Rails 的强烈反对,因为我已将 User 子类分为许多不同的子类。在我的应用程序中,并非所有用户都是平等的。实际上有很多模型对象,并不是每个用户类型都可以访问它们。
我还需要一种方法来进行多态行为。例如,许多方法的行为会根据类型而有所不同。这不正是多态性的目的吗?
但问题是,我总是受到 Rails 的阻碍。默认值 - 特别是表单提交参数哈希的方式 - 似乎像非子类化模型一样工作。链接和参数哈希只是默认值真正困扰您的两种方式。
在 Rails 中处理不同类型用户的复杂逻辑的“正确”方法是什么?在 Java 中,子类化模型是有效的——您不必费尽心思让它按照您想要的方式工作。但在 Rails 中,很难让子类与 REST 约定一起工作,当你忘记包含时,它会惩罚你:as => :user
,或者当您将子类对象放入链接时它会惩罚您,例如edit_user_path(@user)
还有另外一个领域也很难处理。假设我有一个Company
模型,它有很多Users
。这些用户可以是主管、讲师、实习生等——所有不同的子类。
当我们创建帐户时,我们可能想要使用accepts_nested_attributes_for :users
。但是,如果我们使用它,我们就无法指定它创建的类。该死的!
看起来 Rails 中的所有内容都是为了不希望您对模型进行子类化而设计的。如果你不子类化,一切都会“正常”。但如果你继承了子类,你就会陷入地狱。
解决办法是什么?
一般来说,Ruby 中不鼓励继承,而支持混入行为和委托。 Ruby 和 Rails 可以做到这一点,但它往往会导致你提到的推回
您的特定示例听起来像是委托的情况:有一个属于员工的 User 类(反之亦然)。该员工(例如主管、讲师等)的特定类型行为都属于该特定员工类别。然后用户将如何处理特定场景委托给与其加入的员工
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)