2015-07-21 68 views
2

我在Rails上編寫了一個小項目,但我有點卡住接近它的一個點。Ruby on Rails中的事件的客人

它是一個活動組織平臺,註冊用戶可以創建自己的事件(如社交網絡事件),然後請從平臺外的人,而不需要在其上註冊。我目前通過Devise管理註冊用戶,事件部分也完成了,所以現在用戶可以註冊,登錄/註銷...並創建活動。

當接近客人時,我的疑問就來了。我試過創建一個新模型(guest),並添加設計功能,就像我對用戶做的一樣,但我無法讓它正常工作。

我希望用戶能夠通過電子郵件邀請客人蔘加他們的活動,並且該平臺會爲他們生成一個邀請碼,以便他們可以使用電子郵件和邀請代碼的組合來登錄該特定活動,以便他們可以檢查該活動的信息,並能夠告訴主持人是否參加活動。

正如我仿照我的實體 - 關係,客人將是一個弱實體,因爲它們完全取決於事件的,所以客人模型本身可以包括考勤信息。

所以我的問題是,應該如何處理這個RoR的方式?我可以使用Devise來解決這個問題,還是有其他更簡單的方法嗎?

+1

這聽起來像客人與用戶一樣。爲什麼不在客人接受邀請時創建一個新用戶(客人)? –

+0

@Trigork我想我回答了你的問題,如果你需要一些幫助,可以免費發表評論。 –

+0

在幾年前我在PHP中創建的這個問題的一個較早的實現中,用戶和來賓是相同的,但角色不同。正如我在下文所述,我想讓客人儘可能地依賴於事件,我認爲這意味着一種不同的模式。 – Trigork

回答

0

如果你使用的設計,你可以添加devise_invitable寶石。這個寶石將允許您登錄的用戶邀請某人。

寶石會生成一個邀請令牌,以及自定義視圖的invited users

invited user成爲real user(當他接受邀請並註冊時),他將能夠接受事件邀請。

我不認爲你真的需要一個Guest模型在這裏。

+0

問題是我不希望客人必須註冊到平臺。我想讓他們依賴於事件,以便他們的信息儘可能保持匿名。這樣,如果事件被刪除,他們的信息也會消失。 – Trigork

2

我覺得去了解這一點的最好辦法是讓來賓模式像你試過:

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

然後,你的用戶和事件模型將如下所示:

class Event < ActiveRecord::Base 

    # the owner of the event 
    belongs_to :user 
    # an event has 0..n guests coming to it 
    has_many :guests, dependent: :destroy 
    has_many :saved_users, through: :guests, source: :user 

end 

class User < ActiveRecord::Base 

    # a user has 0..n created events 
    has_many :events 
    # a user has many guests for those created events 
    has_many :guests, dependent: :destroy 

    # a user has 0 to n saved guests through the guests table 
    has_many :saved_guests, through: :guests, source: :event 

    # the rest of the Devise configuration code goes here ... 
    # ... 
end 

我不知道你,但我更喜歡做這些模型,無需手動內置的方法,這樣你真正得到的模型之間的一些巧妙的做法處理協會和關係,請參閱通過更多信息的官方指南,有很多,等:

http://guides.rubyonrails.org/association_basics.html

dependent: :destroy子句用於確保在調用對事件所有者或事件本身的銷燬時刪除guest虛擬機。

+0

這裏的問題是,如何將陣風記錄到事件中? – Trigork

+0

那麼在你的控制器中,它只是'current_user.guests.create(user:user)',或類似的東西,這取決於你保存客人的位置。 – 2015-07-21 17:34:58

+0

我正在談論類似於Devise提供的功能(登錄,註銷,會話等),但對於來賓來說,他們可以登錄該活動,查看其信息並告訴他們是否參加。 – Trigork