2017-01-07 23 views
1

私は、ユーザがグループを作成し、他のユーザがグループに参加できるグループシステムを実装しようとしています。Ruby on Rails - グループのユーザ

<% if current_user == @group.owner %> 

しかし、私はしてグループのメンバーを確認することができないよ::

class User < ApplicationRecord 
    has_many :groups 
end 

class Group < ApplicationRecord 
    belongs_to :owner, :class_name => "User" 
    has_many :members, :class_name => "User" 
end 

所有者をチェックするとき、私は正常に使用することができ、私はに実行したよう

<%= @group.members.count %> 

エラー:

SQLite3::SQLException: no such column: users.group_id: SELECT COUNT(*) FROM "users" WHERE "users"."group_id" = ? 

それは私のユーザーがどのようにセットアップされているかと関係がありますが、それを理解することはできません。

また、グループに「参加」しているすべてのユーザーを含むリストを取得できたら、そのユーザーを追加/削除するにはどうすればよいですか?

ありがとうございました。

+0

has_many:members、:class_name => "User"はユーザーテーブルの 'group_id'を期待しています。これはエラーの内容です。 – Abhi

+0

関連するモデル 'Group'によって参照されるように' users'テーブルに外部キー( 'group_id')を追加する必要があります – sa77

答えて

2

ここでは二つの可能性があります:1人のユーザーがあなたの会合は、あなたがどのグループに特定するUserモデルまたはusersテーブルへgroup_id属性を追加する必要があると言うだけで一つのグループに属する場合

One User can belong to Many Groups

は、ユーザーはに属します。現在、例外がスローされている理由は、その列がありません。 ownerに関しては、Userオブジェクトであるownerを与えるテーブルGroupの中にowner_idがあります。

User - group_id 
Group - owner_id 

しかし、あなたが持っているでしょうこの方法は一つだけgroupUserに関連付けられているので、あなたのhas_many :groupsUserモデルでは役に立ちません。あなたが間に別のテーブルを必要とする複数持っている:1人のユーザーが複数のグループに属することができた場合

One User will belong to only One Group

あなたはuser_idgroup_idを持つことになりますし、団体は次のようになりますUserGroupsのような1つの以上のモデルを作成する必要があります。

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

class Group < ActiveRecord::Base 
    has_many :user_groups 
    has_many :users, through: :user_groups #This can be members also using `class_name` 
end 

class UserGroup < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :group 
end 
+1

私はこの質問/回答を参照することでこれを得ることができました、http://stackoverflow.com/questions/5639202 /グループとユーザーの間での作成方法 - 作成 - 参加の手助け –

1

ユーザーはグループに属しています(忘れてしまった)。 グループスキーマではグループIDが必要です。グループを作成すると、他のユーザーがその特定のグループに参加できるようになります。所有者とメンバの両方が、スキーマ内の "参照"型である必要があります。それであなたは大丈夫です。

+0

例を示すコードを追加できますか?私はRailsには初めての経験があり、苦労しています。 –