通过关联访问rails中的连接表数据

时间:2010-11-26 04:41:12

标签: ruby-on-rails

我有三张桌子/型号。用户,联盟和Alliance_Membership。后者是一个连接表,描述了:Alliance has_many:用户通过:Alliance_Membership关系。 (:用户有一个:联盟)

一切正常,但Alliance_Membership现在有一个名为'rank'的额外字段。我正在考虑访问这一小部分信息(排名)的最佳方式。

似乎当我做“alliance.users”,其中联盟是用户的当前联盟对象时,我获得所有用户信息,但我也没有得到排名。我只获得用户模型的属性。现在,我可以创建一个帮助器或函数,如getUserRole,以便根据用户为我执行此操作,但我觉得有一种更好的方法可以更好地使用Active Record关联。真的有更好的方法吗?

Thanx阅读:)

1 个答案:

答案 0 :(得分:1)

你的关联都错了 - 他们不应该有大写字母。这些是规则,如我在其他答案中所见,我昨天告诉你如何设置它:)

班级名称:总是喜欢AllianceMembership(不是Alliance_Membership!)

表名,变量名,方法和关联:始终带下划线和小写:

has_many :users, :through => :alliance_memberships

要查找给定联盟的给定用户的排名(在@alliance和@user中保存),请执行

@membership = @ alliance.alliance_memberships.find_by_user_id(@ user.id)

你确实可以用联盟方法包装它:

def rank_for_user(user)
  self.alliance_memberships.find_by_user_id(user.id).rank
end