2013-11-26 5 views
0

Я использую полиморфные ассоциации в этом случае:полиморфные ассоциации или объединения BELONGS_TO

class Adress < ActiveRecord::Base 
    belongs_to :addressable, polymorphic: true 
end 

class User < ActiveRecord::Base 
    has_many :addresses, as: :addressable 
end 

То, что я хочу сейчас, это пользователь, чтобы иметь домашний адрес и адрес работы. я мог бы:

class User < ActiveRecord::Base 
    has_one :home_address, as: :addressable 
    has_one :work_address, as: :addressable 
end 

Но тогда я не знаю, какой из них является домашним адресом и который один является рабочим адресом.

Как я могу это достичь?

ответ

0

У вас есть таблица Addresses, держите одно поле как 'addressable_type' в вашей таблице Addresses. Чем вы сможете идентифицировать разные адреса.

Либо вы можете иметь эти поля в адресной таблице,

t.integer :addressable_id 
t.string :addressable_type 

или упрощенный вариант:

t.references :addressable, polymorphic: true 

Благодаря

+0

Да, но addressable_type не помогает мне, потому что то, что он сохраняет, является классом «Пользователь». В любом случае, спасибо за вашу помощь. –

+1

addressable_type - это стандартное имя поля, в котором хранится класс связанного объекта в полиморфном отношении. Вы должны добавить еще одно поле под названием «категория» или что-то такое, что может хранить «Работа», «Домой», «Мобильный» и т. Д. –

0

Вы можете настроить STI. Вам понадобится создать столбец type в модели вашего адреса.

class Adress < ActiveRecord::Base 

end 

class WorkAddress < Address 
    belongs_to :user 
end 

class HomeAddress < Address 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_one :work_address 
    has_one :home_address 
end 
+0

Кажется мне очень хорошим решением. Я попробую. Спасибо mate :) –

+0

@GustavoLobo Нет проблем. Если это ответ, который работает для вас, пожалуйста, примите его как правильное. Большое спасибо! – veritas1

+0

Это не работает, потому что то, что оно фактически сохраняет в таблице Адрес - это класс User. В любом случае, спасибо :) –

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