【发布时间】:2011-05-26 23:41:45
【问题描述】:
我从 Rails 中得到了很多回击,因为我将 User 子类化为许多不同的子类。在我的应用程序中,并非所有用户都是平等的。实际上有很多模型对象,并不是每个用户类型都可以访问它们。
我还需要一种方法来执行多态行为。例如,许多方法的行为会因类型而异。这不就是多态性的用途吗?
但问题是,我总是受到 Rails 的反对。默认值——尤其是表单提交给参数哈希的方式——似乎像非子类模型一样工作。链接和参数哈希只是默认值真正咬你的两种方式。
在 Rails 中为不同类型的用户处理复杂逻辑的“正确”方法是什么?在 Java 中,子类化模型是有效的——您不必费力地让它以您想要的方式工作。但是在 Rails 中,很难让子类与 REST 约定一起使用,当您忘记包含 :as => :user 时它会惩罚您,或者当您将子类对象放入链接时会惩罚您,例如 edit_user_path(@user)
还有另一个领域也很难处理。假设我有一个Company 模型,它有很多Users。这些用户可以是导演、讲师、实习生等——所有不同的子类。
当我们创建帐户时,我们可能想要使用accepts_nested_attributes_for :users。但是,如果我们使用它,我们就不能指定它创建的类。该死的!
似乎 Rails 中的所有内容都旨在不希望您对模型进行子类化。如果您不进行子类化,那么一切都“正常工作”。但如果你继承类,你就下地狱了。
解决办法是什么?
【问题讨论】:
标签: ruby-on-rails ruby model subclassing