2015-09-04 64 views
0

我想創建一個應用程序,其中用戶可以創建一個房間並且是其唯一所有者。其他用戶應該能夠加入一個房間,當時只有一個房間,只有他們應該能夠看到本房間發生了什麼。用戶擁有一個模型,其他用戶可以加入此模型

所以我創建了一個控制器rooms_controller和模型房間。

順便說一句我用設計來處理所有Userstuff。

那麼我應該把什麼放入user.rb文件? has_one:房間? belongs_to:房間? 用戶如何加入模型?

回答

0

您可以這樣設計模型。您實際上可以有兩種類型的用戶:OwnerUser,它們可以繼承BaseUser,其中BaseUser是具有所有常用用戶屬性的類。

而且,你的模型協會可以是這樣的:

class BaseUser < ActiveRecord::Base 
    # all the common user attributes here 
end 

class Owner < User 
    has_one :room 
end 

class User < BaseUser 
    has_many :rooms 
end 

class Room < ActiveRecord::Base 
    belongs_to :owner 
    belongs_to :user 
end 

owner有一個roomroom屬於owneruser有很多roomsroom屬於user

您必須在您的rooms表中添加owner_iduser_id。 您的base_users表中還可以有user_type列,用於指示此類型的用戶(即owneruser)。

另請參閱cancancan gem這是Ruby on Rails應用程序的授權Gem。例如,您需要具有不同類型的功能:所有者將能夠創建房間,但用戶無法創建房間,他們只能加入。你需要使用授權來處理這些事情。

+0

用戶在創建房間時可能會自動變爲「所有者」? – Max

+0

它不會自動發生。但你可以這樣做。創建房間時,您可以將房主關聯到該房間,但許多用戶可以關聯(即可以用戶可以加入)該房間。 –

+0

我的整個應用程序都是基於設計構建的。 cancancan必不可少? – Max

0

用戶是否與房間有一對一的關係?在這種情況下,用戶擁有一個房間。或者用戶可以創建很多房間?例如,如果有Room_Visitors表,其中RoomId和UserId表示一行,則用戶可以加入房間。

如果不知道您的廣泛用例,它很難回答。 我建議你研究一下SQL關係,那麼你的用例的答案就會變得清晰。

+0

用戶應該能夠創建一個房間,這個用戶是這個房間的所有者,不應該能夠創建或加入其他房間。每個其他用戶,不是所有者,都應該能夠加入一個房間,只有一個。 – Max

+0

然後,如果一個用戶不能既是所有者又是訪問者,那麼@K M Rakibul Islam建議的繼承策略也是我會去做的。我只想改變模式是這樣的: #我們的系統 類用戶<的ActiveRecord :: Base的的用戶 #所有常見的用戶屬性在這裏,就像ID之類的東西 結束 類業主<用戶 HAS_ONE:房間 結束 類訪問者

+0

很抱歉的壞格式,無法找到如何輸入模式的代碼 –

相關問題