【问题标题】:Access join table data in rails :through associations在 rails 中访问连接表数据:通过关联
【发布时间】:2010-11-26 18:16:59
【问题描述】:

我有三个表/模型。用户、联盟和 Alliance_Membership。后者是一个连接表,描述 :Alliance has_many :Users 通过 :Alliance_Membership 关系。 (:user 有一个:alliance)

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

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

感谢阅读:)

【问题讨论】:

    标签: ruby-on-rails


    【解决方案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
    

    【讨论】:

    • 别担心,我使用了正确的名称,正如您所描述的那样,我只是在这里描述时使用了错误的名称:)。实际上,我找到了一种更好的方法,例如“alliance = Alliance.find(alliance.id, :include => [:users])”,现在我得到了我需要的所有信息。感谢您的回复:)
    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多