4.4.2 文章控制器
使用Rails的generate命令来创建文章控制器。
|
文章控制器拥有与页面控制器和用户控制器相同的模式,但加强了其中一些方法的功能。
编辑app/controllers/articles_controller.rb文件的index方法。
|
1. 分页
首先需要注意的是,我们没有使用常规的find方法来获取文章集合,而是使用了paginate辅助方法。使用这种方法,可以轻松地为大量条目信息编制页码、自动创建页面链接以及返回一些有用信息,比如条目的总数和总页数。
index方法中的分页器仅返回那些published属性为true的文章。分页器会按照published_at字段中的时间来对文章进行排序,默认每页显示10条记录。你可以通过修改paginate命令中的参数来覆盖分页器的现有功能。通过指定:limit参数,你可以修改每页默认显示的条目数。
辅助方法返回了指定的文章结合,即一个Paginator类的实例。从这个类实例中,你可以检索出包括当前页码和总页数在内的信息。这些信息可用于创建到集合中其他页面的链接。
paginate方法还将:include参数指定为:user。这样一来,应用程序会通知ActiveRecord自动检索所有与Article对象相关联的User模型。具体实现过程是:首先构造一条用于表连接的SQL语句,然后通过执行一次SQL查询来检索两个表。如果没有指定:include参数,则每当代码试图引用Article类实例指定的用户时,都会查询数据库;如果有很多用户都创建过文章,那么就会导致大量的数据库查询操作,而不再是使用:include参数时的一次查询。另外,据我们所知,无论何时展示文章都要同时显示作者的用户名,因此现在使用:include参数是有意义的。
2. 返回XML数据
如果客户请求的是XML而非HTML,index方法会在Rails的REST Web服务的支持下自动返回XML数据。指定XML请求的方法有两种:一种是用客户端的HTTP Accept首部,另一种是在URL的末尾添加.xml。也就是说,http://localhost:3000/articles.xml表示返回一张XML描述的文章列表而不是呈现HTML布局。
返回XML数据这种做法简化了API的初始化过程。为代码中所有方法添加此API支持意味着网站做到了真正意义上的开放,并且它还可响应其他应用程序或网站。你可以编写易于与本站交互的桌面应用程序或Web应用程序,而其他的Rails网站则可在不进行额外编码的情况下,通过Rails的ActiveResource模块来访问我们的网站。
3. RSS和Atom Feed
请求到达时,除了提供XML输出,index方法还会响应RSS或Atom结果。不过,它们的XML描述结构在Rails中还没有定义,所以我们需要在.rxml文件中对其进行指定。RXML文件与RHTML文件的结构类似,都用于包装各种视图文件,区别只是定义了XML结构来替代HTML。
为了更简单地生成XML文档,Rails用到了名为Builder的Ruby库。Builder库提供了一种简便的方式来创建有效的XML文件,由于创建过程使用的是Ruby语言,因此你无需检查XML的有效性和格式的正确性。而且,同含XML标记和嵌入式Ruby代码的ERb文件相比,阅读RXML文件要容易得多。
构建RSS Feed需要创建RXML文件app/views/articles/rss.rxml,并在其中输入代码清单4-2所示的代码。
代码清单4-2 指定了文章RSS Feed的rss.rxml文件
|
| 回书目 上一节 下一节 |