2014-01-05 32 views
0

我正在研究Ruby on Rails podcast捕獲器,我無法弄清楚如何爲每個用戶情節模型建模。如何在Ruby on Rails應用程序中爲每個用戶狀態建模

我想有包括約一集的信息,以及用戶是否已經播放的劇集或者他們有什麼評價它的模型。

表是這樣的:

episodes_1 
id | user_id | podcast_id | title | audio_url | duration| is_played | rating 

如果許多用戶都訂閱相同播客會有多條記錄與同 標題和audio_url,所以我想另一個表表示:

episodes_2 
id | podcast_id | title | audio_url | duration 

user_episode_data 
id | user_id | episode_id | is_played | rating 

如果用episodes_2user_episode_data.episode_id = episode_2.id你會在episodes_1

得到一個表的所有信息加入

第二種選擇似乎是更好的方式來存儲數據,但第一種似乎是一種更好的呈現數據的方式。

是否可以使用多個表來存儲模型?

class Podcast < AcitiveRecord::Base 
    has_many :episodes 
end 

class Episode < ActiveRecord::Base 
    belongs_to :podcast 
    has_many :user_episode_datas 
end 

class Subscription < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :podcast 
end 

class User < ActiveRecord::Base 
    has_may :subscriptions 
    has_may :podcasts, through: :subscriptions 
    has_may :episodes, through :podcasts 
    has_many :user_episode_datas 
end 

class UserEpisodeData < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :episode 
end 

我想user.episodes返回每個播客所有情節他們所訂閱的集合,我想user.episodes.first.is_played返回true,如果該用戶曾扮演的小插曲,但情節模型沒有按」牛逼屬於任何用戶,所以我不知道如何將一個模型在軌

+0

你已經完全改變了你的問題的性質,通過插入一個interceding'Subscription'模型。這對於那些試圖幫助的人來說至少可以說是令人沮喪的。在未來,你可能會(並幫助獲得更好的答案)更先期滿足這些類型的要求。 – zeantsoi

+0

我不認爲添加訂閱模式改變了我原來的意思,或者我的問題的性質,但它確實使我的問題更加清晰。我意識到我沒有很好地表達我的自我。 – everett1992

+0

你原來的問題並沒有引用'Subscription'模型是一個單一的時間 - 是的,它確實會改變問題,因爲現在有兩個中介,而不是一個。因此,模型之間的關係需要完全重新繪製。無論如何,我只是在提出一個建議。沒有必要再重複這一點。 – zeantsoi

回答

2

情節和user_episode_data之間的一個關係,沒有必要設立所提議的方式處理這些關係。相反,模型EpisodeUserhas_many :through關係:

class User < ActiveRecord::Base 
    has_many :views 
    has_many :episodes, through: :views 
end 

class View < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :episode 
end 

class Episode < ActiveRecord::Base 
    has_many :views 
    has_many :users, through: :views 
end 

的規範引導的Rails是非常貼切地反映你所描繪的場景爲例provides an explanation。以下是關於has_many :through關係的說明:

has_many:通過關聯經常用於設置與另一個模型的多對多連接。該關聯表明聲明模型可以通過繼續第三個模型與另一個模型的零個或多個實例進行匹配。

請注意,在上面的示例中,View模型有效地用作連接表。如果你想屬性添加到EpisodeUser之間的關係 - has_playedrating,例如 - 你將這些屬性添加到View模型。

+0

如果劇集沒有視圖,它將不會包含在user.episodes集合中。 – everett1992

+0

你能澄清你的意思嗎?這是你想要模仿的行爲嗎? – zeantsoi

+0

我編輯了原帖以添加更多信息。 – everett1992

相關問題