0

記事モデル article.rb があります(関連する画像付き):

attr_accessible :name, :content, :image_ids, :altname1

私は今、都市のためだけの別の種類の記事を作成したいと考えています。それらはウェブサイトのまったく別のセクションに表示され、他のすべての記事とは関係ありません。しかし、モデルはまったく同じです。

新しいモデル cityarticle.rb を作成する方が良いですか、それとも既存の記事モデルに新しいブール列 (オプションとして true と false を持つ cityarticle) を追加する方が良いですか? 次に、コントローラーに新しいアクションを追加します。

def cityarticles
  @cityarticles = Article.where("cityarticle = ?", true)
end

私にとっては、モデルを 1 つだけにしておく方が簡単ですが、新しいモデルにする正当な理由があるのでしょうか? パフォーマンスはどうですか?

4

2 に答える 2

1

自問すべきいくつかの質問: これらのタイプの記事は他にどのような点で異なるでしょうか? さまざまな人がそれらを作成/編集/削除するためのアクセス権を持っていますか? 都市の記事を作成して、それが誤って非都市の記事として保存されないようにするにはどうすればよいですか? ユーザーが渡されたパラメーターで記事タイプをオーバーライドできないようにするために、attr_accessible または strong_parameters を使用していますか? タイプが異なれば、検証規則も異なりますか (都市の記事には都市名が必要になる場合があります)? 欲しい記事だけを手に入れるのはどれくらい難しいですか?表示する記事の種類を指定して、それらすべてを表示するのを忘れる可能性はどれくらいありますか?

このような質問への回答に基づいて、どのデータ構造が最適かを判断できるはずです。Rails の STI パターンを使用すると、1 つの解決策として、1 つのテーブルで 2 つの異なるモデルを使用できます。パフォーマンスはおそらく主な考慮事項ではありませんが、2 つのタイプの記事が一緒にクエリされることがない場合は、それらを別々のテーブルに分割した方がパフォーマンスの点でわずかに優れている可能性があります。

于 2013-04-08T13:35:49.170 に答える
1

新しいモデルは、システム上の新しい「エンティティ」を表します。

CityArticles が Article を拡張するとします。

「CityArticles」よりも機能を増やすには、コードの明確さと拡張性のために新しいモデルにする必要があります。

新しいテーブルの足場または移行を作成できます。

rails g scaffold CityArticles リファレンス:記事

または、Article クラスのポリモーフィックな関連付けを作成します。http://teachmetocode.com/articles/ruby-on-rails-what-are-polymorphic-associations/を読む

于 2013-04-08T12:49:31.747 に答える