Rails STI控制器

时间:2009-03-27 15:44:17

标签: ruby-on-rails ruby

我有一个使用STI的Rails站点,其中包含以下类:

主页<页

LandingPage<页

在前端,所有请求都由Pages控制器处理。但是,如果检测到的对象实际上是LandingPage的一个实例,我希望调用LandingPages控制器上的操作。 (例如,子控制器类中的show方法将引入一些并不总是相关的特定查找。)

有关如何最好地完成此任务的任何建议?

由于

2 个答案:

答案 0 :(得分:1)

这听起来有点像你在混淆MVC的区别,但它应该是可行的。

我会在Pages模型上添加一系列测试(例如supports_buzzbar_foo?wiggums_itemization_controller,然后在子类中适当地覆盖它们)并在视图中使用这些测试来有条件地生成相应的链接到你想要的控制器方法。

这样你就可以保持每个部分(粗略地)完成它的工作。

答案 1 :(得分:0)

马库斯的解决方案应该有效。您还可以将链接保存在指向Pages的视图中,评估传入的对象,然后根据对象类重定向到相应的控制器。

但是,除非您对每种类型的对象执行完全不同的操作,否则您最终会在控制器中找到重复的代码。因此,您最好不要使用Pages控制器,只需添加一些方法来处理该对象所需的额外查找。