2012-05-08 9 views
0

私は標準フィールドを持つDevise Userモデルを持っています。ユーザーは、いずれかのプロファイルまたはハウスを持つことができますが、両方を持つことはできません。Rails - アソシエーションを使用して二分法を実施する

class User < ActiveRecord::Base 

    attr_accessible ..... :profile_type 
    has_one :profile, :dependent => :destroy 
    has_one :house, :dependent => :destroy 

end 

この現在の状態では、ユーザーはプロファイルと状態の両方を持つことができます。次のようにします:User.first.profileはプロファイルを返します。その後、User.first.houseを実行してnilを返します。それは非常にいいとは思われません - 実際、私は後で無効なデータの問題に遭遇するようです。

編集:これは、人々が滞在する場所を探しているか、滞在する場所がある場合のためです。だから私は人ができるユーザーの2つのカテゴリがあります。これらの2つのカテゴリは非常に異なっています(つまり、滞在する場所を探している人は、滞在する場所の人に非常に異なるフィールドを持ちます)。

この「どちらか」の関係を強制することはありますか?私はRailsがあなたに心を新しくしています。あなたはカスタム検証でこれを扱うことができる

+0

[可能なモデルは "belongs_to"または複数のモデルのいずれかですか?](http://stackoverflow.com/questions/1700800/can-a-model-belongs-to-either-or-more) -than-one-model) –

+0

その質問はちょっと違うようですが、私は100%確信していません。 –

答えて

1

-

validate :has_either_profile_or_house_but_not_both 

private 

def has_either_profile_or_house_but_not_both 
    if profile.present? && house.present? 
    errors[:base] << "User can have either a profile or house, but not both." 
    end 
end 

それはソフトウェア設計を経て、これを行うためのクリーンな方法がありますことは可能ですが、あなたが解決しようとしている問題を知らなくても、これは私が持っている最高の提案です。

+0

うん。それは私がこれについて間違っていると思うようにしています。 –

+0

これは、多態性 'belongs_to'の場合に当てはまります。 [this](http://guides.rubyonrails.org/association_basics.html#polymorphic-associations)を見てください。 – x1a4

+0

よろしいですか?ありがとう。元の質問を編集してもう少し詳細を追加しました。 –

関連する問題