0

我一直在研究解决我的问题的最佳方法,我最初是作为单表继承实现的,但我非常担心可伸缩性,因为表中可能会有数千列。

所以问题是我想要产品,每个产品的方法完全相同,唯一的区别是每个产品包含的属性。在这种情况下,多类继承(rails 本身不支持?)似乎是最好的方法或某种多态关联。

我想朝着以下方向努力

#product.rb
Class Product < ActiveRecord::Base

 attr_accessible :title .....

 def to_s # some arbitrary method used by all extending classes
 ....
 end

end


#book.rb
class Book < Product
 attr_accessible :author...
end

所以我希望这本书继承产品的方法,而不是让产品知道每个子类所需的属性。如果可能的话,通过一个查询获得所有产品。

我需要知道解决这个问题的最佳方法,如果我做错了,请注意上面编写的代码只是为了简化我的问题。

4

2 回答 2

1

您可以做的是创建一个模块并将其包含在几个不同的模型中。

首先,在你的 lib 目录中创建一个文件

即)my_module.rb

module MyModule
  def full_name
    "#{first_name} #{last_name}"
  end
end

然后,确保在 Rails 应用程序启动时加载模块:

在 config/application.rb 中:

config.autoload_paths += %W(#{config.root}/lib)

最后,将其包含在您的模型中:

即)app/models/thing.rb

class Thing < ActiveRecord::Base
  attr_accessible :first_name, :last_name

  include AdditionMod
end

您可以在控制台中对其进行测试:

@thing = Thing.create(first_name: "Awesome", last_name: "Module")
@thing.full_name
=> "Awesome Module"
于 2012-09-08T00:55:25.290 回答
0

发现我可以将 H-store 与 postgres 结合使用,这使我可以拥有一个包含模式较少哈希的列,该哈希可以与 postgres 的功能一起使用(例如,请查看http://hstoredemo.herokuapp .com/ )

于 2012-09-20T07:32:57.533 回答