Какой лучший способ сделать систему «пара» в рельсах? - PullRequest
2 голосов
/ 14 августа 2011

Я программирую RPG-сайт на Rails 3.1 и у меня есть модель User (поля не имеют большого значения).

Мне нужно, чтобы я мог жениться на двух пользователях, но я не знаю, как лучше всего объединяться.

Я думал о user1 и user2 как о столбцах, но я не знаю, как сказать, что оба они одинаковы, когда связывают его с моделью User, чтобы узнать, женат ли пользователь или нет. (то есть идентификатор пользователя может находиться в одном или другом столбце ...)

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 14 августа 2011

Если это всегда один к одному, вы можете настроить его так:

class User
  belongs_to :partner, :foreign_key => :partner_id, :class_name => 'User', :inverse_of => :partner
end

Что должно обрабатывать и обратные отношения, например,

user_1.partner = user_2
user_2.partner # <user_1>

Если вам нужно Marriage в качестве класса, брак может просто относиться к пользователям через has_many и подтверждать, что количество пользователей равно 2 (если это традиционный брак). Например. если вы пошли по маршруту STI:

class Marriage < ActiveRecord::Base
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :marriage
end

class TraditionalMarriage < Marriage
  validate do |record|
    if record.users.length != 2
      record.errors.add(:users, "Marriage is between 2 people!!")
    end
  end
end

class PartyTimeMarriage < Marriage
  validate do |record|
    if record.users.length < 3
      record.errors.add(:users, "A good marriage requires at least three spouses!!")
    end
  end
end
1 голос
/ 14 августа 2011

это не проверено, но стоит поэкспериментировать с

class User < ActiveRecord::Base
    belongs_to :spouse, :class_name => "User", :foreign_key => 'spouse_id' 

    def get_married_to(user)
        self.spouse = user
        user.spouse = self
    end
end

u1 = User.new
u2 = User.new
u1.get_married_to(u2)    

также ознакомьтесь с направляющими рельсов: http://guides.rubyonrails.org/association_basics.html

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

Некоторая форма

has_one :wife, :class_name => "User"
belongs_to :husband, :class_name => "User"

должна работать в вашей активной модели записи пользователя.Может быть, пощечина для какой-либо проверки по признаку пола.

Другим решением будет создание таблицы в браке с двумя ссылками на пользователя (has_one) для хранения дополнительных данных, таких как дата брака и прочее.

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