2013-03-19 43 views
1

我正在致力于为学生和教职员提供一个日历(ICS订阅)的学术日期(开始和结束的期限&考试时间,课程日期时间,考试日期和时间等)。我是Ruby和Rails的新手;我们在这里开始更多的工作,所以我认为这将是一个很好的学习机会。我无法弄清楚如何构建和建模应用程序的某些部分(如果有的话)。Rails新手 - 如何构建日历生成应用程序

该应用程序在概念上很简单:在

  • 用户日志和用户记录是为他们创造。生成UUID并存储在用户的记录中;它用于生成他们的ICS URL(http://myservice.foo/feeds/johndoe_ce4970706f320130588b109add5c7cb0.ics)。

  • 当用户请求他们的ICS文件(通过上述网址),我需要查询一堆不同的系统,从而为建立一个日历来获取信息:

    • 学生信息系统(SIS)包含用户的时间表(例如johndoe从10:30 - 11:20开始在MWF上使用ENGL 100)。我需要解析这些数据并创建事件。
    • 我们的在线学习管理系统Canvas为其内部的课程提供了日程安排。它可以作为ICS文件访问,所以我需要下拉该文件,解析并将其包含在我的应用程序将生成的“主”日历中。
    • 教师可以为他们的课程指定一个额外的ICS URL,以便他们可以包含以上两个来源中未提供的任意事件。像Canvas日历一样,我需要下载并解析ICS。

我有第一部分工作;我可以通过我们的单点登录系统(CAS)登录,并使用生成的UUID创建用户记录。不过,我不确定如何处理第二部分。我不需要存储太多的永久数据;基本上,我只需要保留用户记录(其中包含用户名,生成的UUID以及Canvas LMS的一些访问令牌)。该Feed将在第一次请求时生成,缓存一段时间(并在需要时按需重新生成)。

我应该在哪里放置解析和生成代码?我希望它有点模块化,因为我预计在出现问题时会添加其他数据源。我是否应该创建日历和事件模型,如果我实际上没有持续这些数据?

回答

1

不,不需要创建与第三方服务交互的空模型。我有类似的问题,我需要从外部服务接收数据,并希望它是模块化的。我发现的一个推荐解决方案是在rails项目的根目录下的“lib”文件夹中创建一个类(处理与外部服务交互的业务逻辑)。

它以后可能需要在您的控制器,并用于从第三方服务接收日期。或者,如果您希望自动加载,则可以在config.autoload_paths设置下的application.rb文件中添加lib目录的路径。

+0

把东西放在/ lib和/ app/services中有区别吗?我已经看到这两种方式。 – grahamb 2013-03-20 22:10:35

+1

由于“lib”文件夹中的Rails 3类不是自动加载的,并且必须是必需的,但“/ app/services”中的类将自动加载。如果你只需要单个控制器中的服务类,那么将它放在“lib”文件夹中并仅在该控制器中需要它是比较安全的。 – georgelx 2013-03-21 07:06:15