2016-03-25 25 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 

我是什麼尋找是能夠訪問(和添加)來賓用戶到一個事件,我已經嘗試了所有的變種ations我的事 「Event.find(1).guests」,只得到了以下錯誤:

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遷移是以下幾點:

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

編輯你的帖子向我們展示你的'event_guest'移民。看起來你沒有添加身份證。 –

+0

@ryank已經添加 –

+0

好的。我已經使用ActiveRecord已經有一段時間了,但不應該'has_many:event_guest'是複數,就像'has_many:event_guests'? –

回答

1

就像@Dharam提到的,你的命名約定是不正確的。您需要重命名event_guest表。

$ rails g migration rename_event_guest_table 

然後遷移看起來是這樣的:

def change 
    rename_table :event_guest, :event_guests 
end 

然後你需要更新你的event.rb模型是

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

而且你user.rb型號:

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

將依賴銷燬關閉事件關聯和event_guests關係。你不想因爲一個客人不會去摧毀這個活動......

+0

不得不改變第二個_「has many」_事件到'has_many:guests,:through =>:event_guests,: source =>:user',但它工作完美!非常感謝! –

0

嘗試增加self.table_name = 「event_guest」給EventGuest,因爲這就是你在遷移中的情況,這與模型名稱中的「event_guests」的期望值相反。