0

我有一个带有标准字段的设计用户模型。用户可以拥有个人资料或房屋,但不能同时拥有两者。

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。这似乎不太好 - 事实上,我似乎稍后会遇到无效数据问题。

编辑:这是针对人们正在寻找住宿地点或他们有住宿地点的情况。所以我有两类用户,一个人可以是。这两个类别非常不同(即寻找住宿地点的人与有住宿地点的人将拥有非常不同的领域)。

无论如何要强制执行这种“两者”关系吗?我对 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 回答