2013-10-23 97 views
0

我工作在軌道4(https://github.com/acandael/courseapp實施中的Rails應用4

的視頻教程應用程序,我正在考慮如何最好地實現該功能用戶可以在其中看到許多對5月協會,他完成的章節和他觀看的視頻。完成的章節後,他們旁邊會看到一個「已完成」標籤,觀看的視頻旁邊會顯示一個複選標記圖標。

我認爲要實現這一點,例如用於章節的方式是建立用戶模型和章模型之間的許多一對多關聯。關於這種情況下

兩個問題。請問我的連接表需要額外的領域,除了爲USER_ID和chapter_id外鍵的字段,例如boolean類型的字段「is_complete」?

第二個問題,我怎麼能在我看來,檢查用戶是否已完成的一章?我可以

@user.chapter.is_complete? 

謝謝你的建議,

安東尼

+0

是。您需要在連接表中添加一個類似'is_completed'的字段。所以你必須在這裏通過關聯使用has_many。我有一個問題,在這裏完成和查看的意思是什麼? –

回答

0

多對多關係檢查,這是處理這種情況的最好辦法。

class Chapter 
    has_and_belongs_to_many :users 
end 


class User 
    has_and_belongs_to_many chapters, 
          :as => :completed_chapters # Not sure about this 

    def has_completed?(chapter) 
    completed_chapters.include?(chapter) 
    end 
end 

# Create a basic relationship here 
user = User.new 
chapter = Chapter.new 
user.chapters << chapter 

user.has_completed?(chapter) 
# => true 
+0

嗨screenmutt非常感謝您的回答。關於has_and_belongs_to_many方法,不是的has_many:通過方法時下首選? – Toontje

+0

@Toontje它比偏好更依賴於需求。這裏唯一的區別是對於HABTM,我們不需要創建連接模型,但在HMT中,連接表仍然存在(只有來自兩個表的外鍵),我們可以在連接表中添加額外的字段,就像在案件。爲了處理這些額外的領域,我們有連接模型。 –

+0

感謝Manoj。現在我正在考慮,has_many:通過關係可能會更好,因爲在連接表中有一個'has_started'字段也許會很有趣。 – Toontje