2010-11-26 36 views
0

我有三个表/模型。用户,联盟和联盟会员。后者是一个连接表,其中描述:Alliance has_many:用户通过:Alliance_Membership关系。 (:用户有一个:联盟)在rails中访问连接表数据:通过关联

一切正常,但Alliance_Membership现在有一个额外的字段,称为“排名”。我正在考虑访问这一小段信息(排名)的最佳途径。

看来,当我做“alliance.users”的时候,联盟是用户当前的联盟对象,我得到了所有的用户信息,但是我没有得到排名。我只获取用户模型的属性。现在,我可以创建一个助手或像getUserRole这样的函数来基于用户为我做这件事,但我觉得有更好的方法可以更好地处理Active Record关联。有没有更好的方法?

Thanx for reading :)

回答

1

您的关联都是错的 - 他们不应该有大写字母。这些是规则,我在其他的答案在哪里见过我告诉你如何设置这个较昨日:)

类名:始终驼峰状AllianceMembership(NOT Alliance_Membership!)

表名,变量名,方法和协会:始终强调和小写:

has_many :users, :through => :alliance_memberships 

要找到一个给定的联盟给定用户的等级(在@alliance和@user举行),做

@membership = @ alliance.alliance_memberships 。找_by_user_id(@ user.id)

你可能确实是在联盟的方法把这个包:

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

别担心,我使用正确的名称,如你形容他们,我只是用错了名字,而在这里描述它:)。我实际上找到了一个更好的方法来做到这一点,比如“alliance = Alliance.find(alliance.id,:include => [:users])”,现在我得到了我需要的每一个信息。感谢您的回复:) – Spyros 2010-11-26 10:19:53

相关问题