2015-06-02 57 views
1

我有一个课程模型,它以一种宁静的方式去控制器和视图。多个视图相同模型

对于我的课程表现,它是全功能的。我现在想要另一个课程节目,其中将有一个简化页面,它像原来的课程表演。

我该如何执行此操作?我希望它是安宁的,所以在我的控制器中应该只有显示,更新,索引等。

我应该创建另一个控制器与模型名称不同吗?例如。 Course2?

+1

为什么不直接向现有控制器添加其他操作?没有法律规定您只能在控制器中使用REST-ful操作。 –

+1

没有法律,但一个宁静的应用程序不应该有这样的。没有法律规定你不能将模型逻辑放入视图中,但它是代码异味。 – sonnyhe2002

+2

控制器的动作是否相同?恩。 '@course = Course.all' for'index'如果是这样,如果你检查了一个简单的参数并根据这个参数提交了一个部分。 Erb示例 - '<%if params [:simple] =='true'%><%= render'simple'%><% else %><%= render'full'%><% end %>' – Clark

回答

1

如果它是一个管理视图与公共视图,我将有两个不同的RESTful控制器完全不同的名称空间。或者,如果你认为你将有很多这样的总结和全视图的东西,那么根据这个区别创建命名空间。

另一种选择是将差异编码在单个ERB模板中。或者你实际上可以让show动作使用一些条件逻辑从同一个动作渲染不同的模板。

虽然没有更多的上下文,但我不能说真正的最佳选择。我个人反对创建非REST风格的操作,除非它真的是一次性的事情。根据我的经验,非REST风格的行为往往会失控,控制器可能变得非常难看,并且不直观。

+0

这是相同的上下文指导上下文,命名空间是相同的。摘要页面在控制器中的含义较少,这就是为什么我不想使用具有多个视图的一个控制器的原因。 – sonnyhe2002

1

如果这真的只是显示一个子集或不同的相同信息的安排,那么我认为这是一个工作的观点。控制器最多可以使用相同的动作,但选择一个不同的视图进行渲染,例如,如果用户希望看到html与纯文本,可能会执行此操作。

控制器作业是解释模型,视图作业是收集和显示信息。如果你所描述的“摘要”不仅仅是信息的一个子集,例如,如果你开始计算正在旅行的距离或需要多长时间,我认为你会担心其中有逻辑的观点或者根据提供的数据花费多少钱,那就太糟糕了。

所以我这只是一个子集,然后我会建议基于由您的控制器设置的某些变量渲染partials,或者如果显示器的组织需要实质性差异,那么控制器可以选择不同的模板来渲染。

相关问题