2016-09-20 5 views
0

私は、ユーザーがイベントに登録できるようにするアプリケーションを作成しようとしています。すべてのイベントには、イベントに参加する予定のオーナーとユーザーがいます。私は、後者のための適切な関連付けを選択するのに問題があります。私はhas_and_belongs_to_manyを試しましたが、それを使用することは推奨されていないので、has_many:throughを試しました。それはうまくいかないようです。これは私が今のところ思い付いたものです:どのRails関連付けを使用する必要がありますか?

class User < ApplicationRecord 
    has_secure_password 

    has_many :events, :foreign_key => :owner_id 
    has_many :event_users 
    has_many :events, :through => :event_users 
end 

class Event < ApplicationRecord 
    belongs_to :user, :foreign_key => :owner_id 
    has_many :event_users 
    has_many :users, :through => :event_users 
end 

class EventUser < ApplicationRecord 
    has_many :users 
    has_many :events 
end 

そしてサインアップのコードは次のようになります。

def sign_up 
    user = User.find(session[:user_id]) 
    @event.users << user 
end 

このコードは、エラーを返します:

Cannot modify association 'Event#users' because the source reflection class 'User' is associated to 'EventUser' via :has_many. 

あなたたちは教えてもらえます私が間違ってやっていること、それを正しく行う方法は?それは私の最初の深刻なRailsアプリであり、本当に正しい方法で書こうと思っています。前もって感謝します。

答えて

0

あなたはおそらく、ゲストとオーナーを区別したいと思うでしょう。私はこれをするでしょう:

#models/event.rb 
    belongs_to :owner, class_name: "User" 
    has_many :guests, class_name: "User", through: :event_users 
    has_many :event_users 

#models/eventuser.rb 
    belongs_to :users 
    belongs_to :events 

#models/user.rb 
    has_many :event_users 
    has_many :events, through: :event_users 
    has_many :event_ownerships, class_name: "Event" 

ここで重要なのは、あなたが示した多対多の関係を持つための、events_serverです。

また、user.eventsの関連付けを再定義することはできません。名前を変更する必要があります。

関連する問題