2012-05-08 3 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, возвращая нуль. Это не кажется очень приятным - на самом деле кажется, что позже я столкнусь с недействительными данными.

Редактировать: Это место, где люди либо ищут место для проживания, либо у них есть место для проживания. Поэтому у меня есть две категории пользователей, которыми может быть человек. Эти две категории очень разные (т. Е. Человек, ищущий место для проживания, будет иметь очень разные поля для человека, у которого есть место для проживания).

В любом случае, чтобы обеспечить соблюдение этих «отношений»? Я очень новичок в Rails.

+0

Возможный дубликат [Может ли модель «принадлежит» к одной или более одной модели?] (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

Это может быть случай полиморфного 'принадлежит_то'. Взгляните на [это] (http://guides.rubyonrails.org/association_basics.html#polymorphic-associations). – x1a4

+0

Хорошо. Благодарю. Я отредактировал исходный вопрос и добавил немного более подробно. –

Смежные вопросы