2016-03-25 4 views
0

私はユーザーが多くのイベントを作成できるこのアプリで作業しています。多くのユーザは、これらのイベントに招待することができ、したがって、私は次のモデルがあります:RoR:アクセス:属性を介して

ユーザー:

class User < ActiveRecord::Base 
    ... 
    has_many :events, dependent: :destroy 
end 

イベント:

class Event < ActiveRecord::Base 
    belongs_to :user 
    has_many :event_guest 
    has_many :guests, :through => :event_guest, :source => :user 
end 

Event_Guest:私は何

class EventGuest < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :event 
end 

ゲストユーザをイベントにアクセス(追加)することができます。そのために、私はすべてのバリエーションを試しました

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: event_guests.event_id: SELECT "users".* FROM "users" INNER JOIN "event_guests" ON "users"."id" = "event_guests"."user_id" WHERE "event_guests"."event_id" = ? AND "users"."event_id" = 1 

マイevent_guest移行は以下の通りであった::= self.table_nameを追加

create_table :event_guest do |t| 
    t.belongs_to :user, index: true 
    t.belongs_to :event, index: true 
end 
+0

あなたの投稿を編集して、あなたの 'event_guest'の移行を見せてください。あなたはそれにIDを追加していないように見えます。 –

+0

@ryank既に追加されました –

+0

私はActiveRecordを使ってからしばらくしていますが、 'has_many:event_guests'のように' has_many:event_guest'が複数であるべきではないでしょうか? –

答えて

1

@Dharamのように、あなたの命名規則は正しくありません。 event_guestテーブルの名前を変更する必要があります。

$ rails g migration rename_event_guest_table 

そして移行は次のようになります。

def change 
    rename_table :event_guest, :event_guests 
end 

あなたはその後、

class Event < ActiveRecord::Base 
    belongs_to :user 
    has_many :event_guests 
    has_many :guests, :through => :event_guests, class_name: 'User' 
end 

そして、あなたのuser.rbモデルであるためにあなたのevent.rbモデルを更新する必要があります。

class User < ActiveRecord::Base 
    ... 
    has_many :event_guests, dependent: :destroy 
    has_many :events, through: :event_guests 
end 

依存破壊を解除するイベントの関連付けとevent_guestsの関係。 1人のゲストが行っていないという理由だけで、イベントを破壊したくない...

+0

2番目の_ has_many:guests、:through =>:event_guests、 source =>:user'、しかしそれは完璧に機能しました!どうもありがとう! –

0

てみ私は "Event.find(1).guests" のもの、のみ、次のエラーを取得する可能性ations "event_guest"をEventGuestに渡すと、モデル名からの "event_guests"の予想とは逆のマイグレーションが発生します。

関連する問題