我有三张桌子/型号。用户,联盟和Alliance_Membership。后者是一个连接表,描述了:Alliance has_many:用户通过:Alliance_Membership关系。 (:用户有一个:联盟)
一切正常,但Alliance_Membership现在有一个名为'rank'的额外字段。我正在考虑访问这一小部分信息(排名)的最佳方式。
似乎当我做“alliance.users”,其中联盟是用户的当前联盟对象时,我获得所有用户信息,但我也没有得到排名。我只获得用户模型的属性。现在,我可以创建一个帮助器或函数,如getUserRole,以便根据用户为我执行此操作,但我觉得有一种更好的方法可以更好地使用Active Record关联。真的有更好的方法吗?
Thanx阅读:)
答案 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