2016-06-27 4 views
0

私はユーザとプロジェクトの間のアソシエーションを作成して、ユーザがプロジェクトに参加できるようにしました。アソシエーションテーブルは存在しますが、どのようにアソシエーションを作成するのかは不明です。Rails 4 - has_and_belongs_to_manyのアロケーション

View

Schema

+0

ここでの質問は、hasとmany associationに属するプロジェクトにユーザーを援助するコードを書く方法です。 –

+0

はい!どこで始めるべきなのかわからないT_T –

答えて

0

あなたのプロジェクトのIDが内部に隠されていますので、あなたが@projectとインスタンスのインスタンスを持っている場合は、ちょうどそう、この内部は、JOIN(ポスト)アクション

def join 
    @project = Project.find(params[:project][:id]) 
    current_user.projects << @project 
end 

を行うことができます私の例ではcurrent_userです(例えばdeviseを使用している場合など)。オペレータを使用して割り当てます。< <

ここ

は参照です:

http://guides.rubyonrails.org/association_basics.html#has-many-association-reference

ので検証、あなたがコールバックに行うための方法がないので、私は間違いなく、にない使用has_and_belongs_to_manyあなたをお勧めしなければならないことが

+0

お返事ありがとうございます。グループに参加したユーザーをどのように表示するのですか? –

+0

ちょっと分かりましたありがとうございました!私はまだupvoteを傾ける... –

1

を役に立てば幸いし、に。

実際の結合モデルを使用してhas_many, throughを使用するのは間違いなく良いです。

class User 
    has_many :project_users, dependent: :destroy 
    has_many :projects, through: :project_users 
end 

class Project 
    has_many :project_users, dependent: :destroy 
    has_many :users, through: :project_users 
end 

class ProjectUser 
    belongs_to :project, required: true 
    belongs_to :user, required: true 

    validates :project, uniqueness: { scope: :user } 
end 

これは非常にシームレスに動作し、あなたが行うことができます:

User.update(project_ids: [1,5,6,7]) 

し、任意の検証が失敗しない限り、それはこれらのプロジェクトにユーザーを参加しますが。

私は数ヶ月後に私たちが重複の問題、レコードの悪い状態に陥り始めた後、これらのテーブルで大きなプロジェクトを開始しました。実際の結合モデルを使用することはその価値があります。

+0

ヒントをありがとう!それを心に留めてください! –