2010-11-26 6 views
0

私は3つのテーブル/モデルを持っています。ユーザー、同盟、同盟メンバー。後者は、Alliance has_many:Users through:Alliance_Membershipの関係を記述する結合テーブルです。 (:ユーザーは1つ:同盟)レールでのテーブルデータへのアクセス:関連付け

すべて動作しますが、Alliance_Membershipには「ランク」という余分なフィールドが追加されました。私はこの小さな情報(階級)にアクセスする最善の方法を考えていました。

アライアンスがユーザーの現在の同盟オブジェクトである「alliance.users」を実行すると、すべてのユーザー情報が取得されますが、ランクも取得されないようです。私は、ユーザーモデルの属性のみを取得します。今、私は、ユーザーに基づいて私のためにこれを行うためにgetUserRoleのようなヘルパーや関数を作成することができますが、私はアクティブレコードの関連付けでうまく動作する良い方法があると感じています。本当に良い方法がありますか?

読書のためのありがとう:)

答えて

1

あなたの団体はすべて間違っている - 彼らは大文字を持つべきではありません。これらは、私は昨日、これを設定する方法をあなたに言った:)

クラス名私の他の回答に見られるように、ルールです:(!Alliance_Membership NOT)常にAllianceMembershipのようにキャメルケース

テーブル名、変数名、メソッド・協会:常に強調し、下部ケース:(@allianceと@userで開催された)指定された提携の与えられたユーザのためのランクを見つけるには

has_many :users, :through => :alliance_memberships 

は、

@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 
+0

をあなたがそれらを記述するように、私は正しい名前を使用しています、心配しないで、私はちょうど間違っを使用ここにそれを記述している間に名前をつけます私は実際には "alliance = Alliance.find(alliance.id、:include => [:users])"のようにするより良い方法を見つけました。あなたの返信のための高尚:) – Spyros

関連する問題