如何为User模型定义对?

时间:2014-05-28 16:58:51

标签: activerecord rails-activerecord

我有一个用户模型,我想配对用户。因此user1可以与user2配对。我想将这些关系存储在名为Pair的单独模型中。此Pair模型具有2个整数属性:user_idpair_id。两者都将包含User模型中的ID。

class User < ActiveRecord::Base
  has_one :pair
end

class Pair < ActiveRecord::Base
  belongs_to :user, foreign_key: 'user_id'
  belongs_to :pair, foreign_key: 'pair_id'
end

这允许我这样做:

User.first.pair

我得到了Pair模型的一个实例。

但如果我想在一步中直接得到这对,我必须这样做:

User.first.pair.pair

这看起来很难看。 有没有更好的方法呢?

作为奖励,能够做到这一点真是令人惊讶:

User.first.pair = User.last

1 个答案:

答案 0 :(得分:0)

为了摆脱双对调用,我们可以像这样在User模型中重新定义关联:

class User < ActiveRecord::Base
  has_one :pair_record, class_name: 'Pair'
  has_one :pair, through: :pair_record
end

这样你可以做以下事情:

u1 = User.find(1)
u2 = User.find(2)

u1.pair = u2
u1.pair # -> u2