【问题标题】:rails model using class hierarchy from an external gem?使用来自外部gem的类层次结构的rails模型?
【发布时间】:2011-02-23 16:14:14
【问题描述】:

我正在做一个数据模型所在的项目:

  • 在单独的 gem 中实现
  • 不使用 ActiveRecord,也不使用任何关系数据库存储(实际上它依赖于 couchdb)
  • 使用命名空间
  • 大量使用类继承

为了简化架构,假设我们有以下根类:

module Marketplace
 module Food
  class Fruit
  …
  end
 end
end

还有几个专门的课程:

module Marketplace
 module Food
  class Peach < Marketplace::Food::Fruit
  …
  end

  class Tomato < Marketplace::Food::Fruit
  …
  end
end

结束

我希望 Rails 显示(和管理)所有水果,无论它们的性质是什么,而无需修改模型,女巫完全可以在 Rails 之外工作。

问题在于 ActionView 似乎使用一定数量的约定来定义基于真实类名的路径和 url。

因此,如果我展示一个 Apple,在带有显示/删除操作的表中,rails 将查找名为 marketplace_food_apple_path 和类似的方法,这些方法当然不存在。

有没有办法指示 Apple 是 Fruit 的 ActionView::Base 结构?

我希望这个“基本转换”对于基于 Ruby 的框架来说是“微不足道的”,但是这个面向对象模型的简单示例似乎不适用于 Rails?

您如何管理 rails 中的“复杂对象”数据模型?

或者它只是超出了 Rails 的范围?

感谢任何指点!

【问题讨论】:

    标签: ruby-on-rails oop model controller


    【解决方案1】:

    【讨论】:

    • 不,这根本不是我想要的!我正在寻找一种方法来处理在 Rails 中使用 class 继承的现有模型。似乎这是不可能的,在 Rails 3.0 中也不可能。很遗憾,这就是我改用 Ramaze 的原因。模块包含/扩展是一个很好的特性,但根本不适合我们的数据模型模式,主要是因为模型已经存在并且可以完美地工作在我们的 Rails 中。所以我不是在寻找一种方法来改变我们的组件以“适应”Rails,而是使用 Rails 来在 Web 上公开现有的应用程序逻辑。
    【解决方案2】:

    好吧,我看到有很多有用的答案;)。

    它基本上证实了我对 Rails 的怀疑,我认为 Rails 更像是一种 VB:易于学习,适用于小事情(购物或社区网站),但非常有限。

    Rails 在处理复杂的业务逻辑和数据时完全超出了范围!

    由于 Rails 3.0 似乎也不是答案(好吧,我们有几个 ORM,但我们仍然无法在模型中使用继承)我切换到 Ramaze,这是一个小型框架无需假设数据的组织方式使其适用于几乎任何类型的网络需求。

    如果您面临 Rails 的模型约束,也许您应该忘记 Rails 并检查 Ramaze!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      相关资源
      最近更新 更多