我有一个带有标准字段的Devise用户模型。用户可以拥有个人资料或房屋,但不能同时拥有。
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来说,我对你很陌生。
答案 0 :(得分: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
有可能通过软件设计更清洁的方式来做到这一点,但如果不知道你正在解决的问题,这是我的最佳建议。