0

usersgroupsの 2 つのテーブルがあります。ユーザーは多くのグループに所属できます。グループには多くのユーザーを含めることができます。

そこで、結合テーブル groups_users を使用して、ユーザーとグループの間にhave_and_belongs_to_many関係を作成しました。これはすべて期待どおりに機能します。

また、ユーザーごとに ACTIVE グループを指定したいと考えています。既に定義した habtm 関係がなかったら、アクティブなグループの users に列「group_id」を作成し、モデル間の 1 対多の関係を次のように定義します。

class User < ActiveRecord::Base
  belongs_to :group
end

class Group < ActiveRecord::Base
  has_many :users
end

これはうまくいきませんでした。「@user.group.name」などのグループ プロパティにアクセスできませんでした。2 つの関係を指定することで、Rails に多くを求めすぎているのではないかと思います。

そこで、質問が 3 つあります。

  1. 2 つの関係を組み合わせると Active Record が混乱するかどうかは、非常に簡単に理解できました。そうですか?
  2. もしそうなら、これらの関係をどのように実装しますか? 今は group_id を手動で使用しているだけですが、面倒です。
  3. Active Record マジックを使用しているか、アクティブ グループを手動で設定しているかに関係なく、最初の habtm 関係を使用して、ユーザーのアクティブ グループが所属するグループの外にある可能性があります。アクティブなグループがユーザーが属するグループでなければならないという制約を使用してこれを実装する方法について何か考えはありますか?

洞察をありがとう。私は Rails を学習して数週間ですが、この小さな問題の真相を突き止めることで、モデルとテーブルの関係についての理解がかなり深まると思います。

4

1 に答える 1

1

グレッグ - あなたの提案と同様に、私は以前にこれを行ったことがあります。「group」の代わりに「primary_group」を使用し、foreign_key を「primary_group_id」に設定し、:class_name => 'Group' を設定しました。

私は has_and_belongs_to_many をあまり頻繁に使用しないので、それが問題を引き起こすかどうかはわかりませんが、そうは思いません-少なくともユーザーモデルでは。#group メソッドがないので、begs_to を設定しても問題ありません。グループに has_many :users メソッドが絶対に必要かどうかはわかりませんが、とにかく必要ないかもしれません。これは確かに、habtm が作成する「users」メソッドとの衝突を引き起こします。これが必要な場合は、 has_many :primary_users を試して、 :foreign_key => :primary_group_id を設定してください

ほんの少しの考え。今やっていることができるはずなので、何が失敗しているのかわかりません。

于 2010-01-29T06:10:24.977 に答える