0

私は最初に単一のテーブル継承として実装した問題に対する最善のアプローチを研究してきましたが、テーブルに数千の列が含まれる可能性があるため、スケーラビリティについて深く懸念しています。

したがって、問題は、それぞれのメソッドがまったく同じで、それぞれに含まれる属性のみが異なる製品が欲しいということです。この状況では、複数クラスの継承 (レールではネイティブにサポートされていませんか?) が最良のアプローチまたはある種のポリモーフィックな関連付けになるようです。

次を目指して頑張りたいと思います

#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

したがって、各サブクラスに必要な属性について製品が知るのではなく、本が製品からメソッドを継承することを望みます。可能であれば、1 つのクエリですべての製品を取得します。

これにアプローチする最善の方法を知る必要があります。完全に間違っている場合は、上記のコードは問題を単純化するための単なる例であることに注意してください。

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 に答える