1

Railsを使用して掲示板のWebサイトを作成しています。TopicクラスとクラスがありPostます。
2つのクラス(content、title、user_id ..)の類似性に気付くのは簡単です。

このシナリオでのRailsのベストプラクティスは何ですか?Topicから継承する必要がありPostますか?それはどのように機能しますか?

4

3 に答える 3

3

ほとんどの場合、それは異なります。これらが非常に類似したテーブル構造および/または重複するメソッドを持っている場合、私はSTIを使用します。ただし、クラスに異なる外部キーがある場合、私は通常このアプローチを使用しません。

一方、これらにいくつかの共通の特徴があるが、それら自体のクラスが十分に異なる場合は、共通のコードをモジュール(基本的にはミックスイン)に抽出します。より柔軟性が必要な場合は、懸念事項を使用するか、一般的なパターンを宝石に抽出することもできます。

于 2012-12-09T10:26:12.520 に答える
1

単一テーブル継承(STI)を検討することをお勧めします。これにより、複数のモデルで同じデータベーステーブルを共有し、type列で区別することができます。

クイック検索で見つけたトピックに関するいくつかの記事:

于 2012-12-09T10:13:09.310 に答える
1

モジュールミックスイン:このモジュールを任意のクラスに含めるだけです

継承(STI):これらのクラスには同じテーブルを使用する必要があります

多態性:クラスごとに異なるテーブルを使用する必要があります

私の意見では、それは実際には状況に依存するため、一般的にベストプラクティスに答えるのは本当に難しいです-場合によっては、組み合わせを使用したい場合もあります、神は禁じられています。

シンプルで柔軟性があるので、モジュールミックスインを使い続けます。2つの別々のテーブルがあるためにクエリを何度も作成すると思われる場合は、継承(STI)を試してください。経験から、間違いなくPolymorphicは頭痛の種になる可能性があり、慣れていない場合は多くの落とし穴があるため、2つのクラスではおそらく価値がありません。

# Heres one way to set up Inheritance (STI) on a table called 'contents'
class Content < ActiveRecord::Base
    attr_accessible :content, :title
    belongs_to :user
end

class Topic < Content
end

class Post < Content
end

Content.all             # => query topics and posts
#Post.all + Topic.all   # => query topics and posts without STI (doublewriting query)

Post.all    # => only query posts
Topic.all   # => only  topics

General Railsのベストプラクティス? シンプルStupid維持する_ _

于 2012-12-09T11:13:15.100 に答える