Активные ассоциации записей для пользователя и имеют много адресов, один из которых помечен как основной - PullRequest
1 голос
/ 23 августа 2011

Я пытаюсь настроить свои модели рельсов, где у меня есть User, и у них много addresses, но одна из них является их основным адресом. Я хочу иметь возможность получить к нему доступ таким образом, User.first.primary_address_id, а также User.first.primary_address, чтобы получить связанную Address модель.

Есть ли "рельсовый путь", чтобы настроить это?

Я знаю, что мог бы создать primary_address_id поле для User и заполнить его в обратном вызове AR. Но это не позволило бы мне сделать что-то вроде User.first.primary_address

Или я могу создать ассоциации как "User has_many Addresses", так и "User has_one Address" ?? или что-то в этом роде?

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Я знаю, что мог бы создать поле primary_address_id для Пользователя и заполнить его в обратном вызове AR. Но это не позволило бы мне сделать что-то вроде User.first.primary_address

Это правильный способ сделать это.

User.first.primary_address

вернет основной адрес первого пользователя, если он у него был, или ноль, если его нет.

#user.rb
has_one :primary_address

#address.rb
attr_accessor :primary #this allows you to have a primary field of the address form

after_save :check_if_primary

def check_if_primary
   user.update_attribute(:primary_address, self) if primary
end
0 голосов
/ 23 августа 2011

Одним простым способом было бы иметь логический столбец primary_address в вашей модели Address.

Чтобы получить доступ к первичному объекту адреса пользователя, вы можете определить метод primary_address в модели User:

class User < ActiveRecord::Base
  def primary_address
    addresses.where(:primary_address => true).first
  end
end

Поскольку метод primary_address является методом экземпляра, он позволит вам выполнить

User.first.primary_address
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...