4

私が使用している 3 つの基本モデルがあります。

class User < ActiveRecord::Base
  has_many :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :group
  belongs_to :user  
end

class Group < ActiveRecord::Base
  has_many :assignments
end

このスキーマを使用すると、「割り当て」モデルは、どのユーザーがどのグループに属しているかの情報を保持する一種の結合テーブルであると想定できます。だから、私がやろうとしているのは、User オブジェクトを使用して、彼らが属しているグループを見つけることです。

Rail コンソールでは、次のことを行っています。

me = User.find(1)

必要に応じて、ユーザーオブジェクトを返します。次に、このユーザーがどの「グループ」に属しているかを確認しようとしましたが、これは「割り当て」モデルを通過すると考えられていました。しかし、私は明らかに何か間違ったことをしています:

me.groups

どちらが返されますか:

NoMethodError: undefined method `groups' for #<User:0x007fd5d6320c68>

「私」オブジェクトがどの「グループ」に属しているかを調べるにはどうすればよいですか?

どうもありがとう!

4

4 に答える 4

6

各モデルで User - Groups 関係を宣言する必要があります。

class User < ActiveRecord::Base
  has_many :assignments
  has_many :groups, through: :assignments
end

class Group < ActiveRecord::Base
  has_many :assignments
  has_many :users, through: :assignments
end

また、割り当てモデルにいくつかの検証を設定して、割り当てが常に Group AND a User を参照するようにすることをお勧めします。

class Assignment < ActiveRecord::Base
  belongs_to :group
  belongs_to :user  
  validates :user_id, presence: true
  validates :group_id, presence: true
end
于 2013-08-05T14:55:16.523 に答える
2
class User < ActiveRecord::Base
  has_many :assignments
  has_many :groups, through: :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :group
  belongs_to :user  
end

class Group < ActiveRecord::Base
  has_many :assignments
  has_many :users, through: :assignments
end

協会基本をご参照ください

于 2013-08-05T14:56:20.940 に答える
1

あなたmeのタイプは ではありUserませんAssignment。あなたがしたい:

me.assignments.first.groups

これにより、ユーザーの最初の割り当てに属するすべてのグループが得られます。MrYoshiji が以下にコメントしたように、すべてのグループを取得するには:

me.assignments.map(&:groups)
于 2013-08-05T14:55:12.983 に答える
0

グループに has_many を定義していません。試す

me.assignments.first.group 

動作するはずです。

于 2013-08-05T14:55:23.530 に答える