0

ユーザー モデルがあり、性別に固有のプロファイル情報をそれに添付したいと考えています。

以下に示すように、性別に依存しないデータを保持する User モデルに加えて、 FemaleProfile および MaleProfile モデルを使用する必要がありますか?

ユーザーモデル:

has_one :FemaleProfile
has_one :MaleProfile

Fields :Name, :Age

FemaleProfile モデル:

belongs_to :User

Fields :Name, :Age, :Dress_Color

男性プロファイル モデル:

belongs_to :User

Fields :Name, :Age, :Tie_Color

これが本当に正しいかどうかわかりませんが、ユーザーには男性または女性のプロファイルがありますが、関連付けにはユーザーに関連付けられた両方のタイプのプロファイルがあります。

逆ポリモーフィックな関係はありますか? STI を見てみましたが、継承モデル専用のフィールドは許可されていません。

4

2 に答える 2

1

を使用してこのcasで検討しMulti Table Inheritanceます。私は個人的にcitier宝石を使用してこれを実装しています: http://inspiredpixel.net/citer/

具体的にはUser、4 つの共通フィールドを持つテーブルと、それぞれ独自のフィールドを持つ 2 つの継承されたテーブルがあり、これが探しているもののようです。

于 2013-02-07T21:18:32.913 に答える
0

ポリモーフィック アソシエーション (逆ポリモーフィック実装を要求するのはなぜですか?) またはシリアル化された属性を使用できます。

シリアル化された属性

gender_detailsテキスト型の列を追加してから、この属性をシリアル化できます。次に、女性と男性の属性を定義します。

# user.rb
class User < ActiveRecord::Base
  MALE_DETAILS = %w[sports cars]
  FEMALE_DETAILS = %w[perfume flowers]

  serialize :gender_details, Hash

  (MALE_DETAILS + FEMALE_DETAILS).each do |attr|
    define_method attr do
      self.gender_details ||= {}
      self.gender_details[attr.to_sym]
    end

    define_method "#{attr}=" do |value|
      self.gender_details ||= {}
      self.gender_details[attr.to_sym] = value
    end
  end
end

あなたが使用できるように

user.sports = 'Basketball'
user.flower = 'Rose'
于 2013-02-08T14:25:57.450 に答える