0

Railsで次の問題があり、解決方法がわかりません。http://www.trulia.com/の単純なバージョンのような、不動産に関する広告を掲載した掲示板であるテスト Web アプリケーションを構築すると、明らかに、ユーザーはサイトに広告を追加して、「オフィス」で見つけることができます。そして、そこに問題が発生します。アパート、オフィス、ガレージなどの 8 種類の広告があるため、特定のユーザーに属する広告を取得できるようにする必要があり、このユーザーの広告を表示するために 8 つのテーブルすべてに sql リクエストを行いたくありません。たとえば、アパートの販売に関する広告が 1 つしかない場合。だから私は代わりに何かが必要です

@garages = Garage.where("user_id = #{current_user.id}")
@flats = Flat.where("user_id = #{current_user.id}")
@offices = Office.where("user_id = #{current_user.id}")
..... and so on

私はユーザーモデルを持っているので、すべての広告は一部のユーザーに属し、ユーザーに属し、ユーザーが招待したすべての広告に関する情報を含むポリモーフィックテーブルを作成することを考えています。たとえば、「広告」という名前が付けられます。特定のユーザーに属するすべての行を取得するのは非常に簡単ですが、「advertisable_type」にあり、これらの ID は「advertisable_id」からのものです。私の言いたいことを理解していただければ幸いです。それで、初心者へのアドバイスはありますか?:)

4

1 に答える 1

0

既存のモデル Garage、Flat、Office が本当に広告であり、多くの同じロジックと列を共有している場合、明らかにデータの再設計が必要です。

それが99%同じことなら、Advertisementテーブルと列を持たないのはなぜadvertisement_typeですか?広告タイプの分類子が必要な場合は、別のテーブル/モデルを使用して、テーブルでAdvertisementTypesそれらを参照するだけです。advertisement_type_idadvertisements

多くの共通点がある/今後もあると思われるが、多くの異なるロジックもあると思われる場合は、STI (Single table inheritance)の理想的なケースかもしれません。STI を使用する場合 同じ親クラスから継承し、同じテーブルに格納されているさまざまなモデル クラスがあります。

class Advertisement < ActiveRecord::Base
  def ad_text
    "We are selling property: #{read_attribute(:ad_text)}"
  end
end

class GarageAdvertisement < Advertisement
  def ad_text
    "We are selling garage: #{read_attribute(:ad_text)}"
  end
end
于 2013-11-02T11:44:03.877 に答える