0

標準フィールドを持つ Devise User モデルがあります。ユーザーはプロファイルまたはハウスのいずれかを持つことができますが、両方を持つことはできません。

class User < ActiveRecord::Base

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

end

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

編集: これは、人々が滞在する場所を探しているか、滞在する場所を持っている状況です。したがって、人がなり得るユーザーには2つのカテゴリがあります。これらの 2 つのカテゴリは非常に明確です (つまり、宿泊先を探している人と、宿泊先を持っている人とは非常に異なる分野を持っています)。

この「どちらか」の関係を強制する方法はありますか? 私はRailsにとても慣れていません。

4

1 に答える 1

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

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

于 2012-05-08T06:15:36.837 に答える