0

RailsでSTIをいじってみましたが、レコードを特定のモデルに関連付けることについて質問がありました。

次のスキーマを持つProductモデルがあるとします。

#  id         :integer          not null, primary key
#  url_name   :string(255)      not null
#  cover_img  :string(255)
#  created_at :datetime         not null
#  updated_at :datetime         not null

この製品モデルから、2つの継承されたモデルを作成します。

Foo:

class Foo < Product

end

バー:

class Bar < Product

end

レコードをFoo(A)に保存し、レコードをBar(B)に保存するとします。Product.allを呼び出すと、すべてのレコードAとBを取得することを期待しています。ただし、Foo.allまたはBar.allを呼び出すと、それぞれAとBのみを取得することを期待していますが、Foo.allを呼び出すとどうなりますか。またはBar.all、Product.allを呼び出すと得られる結果が得られます。期待される結果を得るためにこの関係を構成するにはどうすればよいですか?

Rails3.2.6とRuby1.9.3を使用しています

4

2 に答える 2

2

ActiveRecordが異なるタイプのインスタンスを区別できるように、製品テーブルに「タイプ」列を追加する必要があります。この列は、次のような文字列型である必要があります。

create_table :products do |t|
  # your other columns
  t.string :type
end
于 2012-08-19T21:53:41.677 に答える
0

答えは、オブジェクトをどのように保存するかにあります。おそらく、本来あるべき製品としてではなく、FooまたはBarとして保存しているはずです。私があなたのように継承されたモデルを使用するとき、私は通常、それらのデータを識別するための共同の方法を継承するためにのみ使用しています。

たとえば、質問と、両方とも質問を継承する文法とビジュアルのような2つの異なるタイプの質問があります。しかし、QuestionsControllerに質問としてオブジェクトを保存します。

ProductsControllerを使用してオブジェクトを保存する必要があるのと同じように。

于 2012-08-19T21:43:20.627 に答える