2013-10-23 98 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