2011-03-02 77 views
2

我是ruby和rails的新手,我很难将MVC技术与数据库视图一起概念化。我正在处理一个遗留的数据库,它有几个用于生成报告的viiews。在rails中处理遗留数据库视图

我迷失方向的是如何实际使用数据库视图。它应该放在模型中吗?如果是这样的话会是什么样子?

作为一个例子,遗留数据库有一个名为qryTranscriptByGroup的视图。它用于SQL语句中的遗留应用程序,如“SELECT * FROM qryTranscriptByGroup WHERE group ='test_group'”。这会返回少量记录,通常少于100.

如果我创建模型,脚本,我将如何定义像Transcript.find_by_group(group)这样的方法?而且,似乎我可能需要防止任何其他“查找”方法,因为在这种情况下它们是无效的。

还有一个事实,即视图是只读的,我需要防止任何尝试创建,更新或销毁它。

也许我正在完全错误的方式。底线是我需要从几个表格(模型?)中获取信息,这些表格表示关于用户(成绩单)的信息。其实一个或多个用户(成绩单复数)。

- 谢谢!

回答

6

您可以像普通模型一样使用数据库视图。

你的情况:

class Transcript < ActiveRecord::Base 
    set_table_name "qryTranscriptByGroup" 
    set_primary_key "if_not_id" 
end 

查询将被然后:

Trascript.find_by_group('test_group') 

,而不需要任何声明。

Rails使用method_missing方法来奇迹般地生成find_by_column_name方法。

对于创建/更新/删除操作,您可以简单地删除它们或不在控制器中创建它们。

+0

令人惊叹!这让我想起了切换到Mac--我一直试图做的事情是“硬道路”(又名MS Windows)。一旦我开始思考“最简单的方式”做事,我就没有更多的问题了! – danv 2011-03-02 18:14:35

+0

在这些成绩单的情况下,我真的会用它们来创建报告。可以安全地说我不需要成绩单控制器和成绩单视图。 现在,我会抓取一份记录并“分析”它来提交报告。会有不同的报告,但他们都使用相同的抄本进行“分析”。 所以,我最终的目标是一个像/ reports/summary/group1这样的路径。这是一个明智的做法吗? – danv 2011-03-02 18:29:29