嗯,我做了一些搜索,但没有找到满意我的答案。情况如下:我想创建一个Rails项目,它既可以提供普通的Web界面(html页面),也可以用于api(用于移动和其他第三方集成)。我必须为api和web界面保留单独的控制器,因为我需要api版本控制。问题是,这种方式我将不得不将大多数Web应用程序控制器代码复制到api控制器代码中,即使控制器是瘦的,仍然会有一些代码将被复制,因此争取大多数瘦 - 控制器不会似乎工作。
在此rails cast Ryan解释版本,但代码确实是重复的。
我想到的解决方案是在模块中使用动作主体,并且让web app控制器和api控制器包含这些模块,然后它们仅在响应方面有所不同:api控制器将呈现json而wep app controllers将呈现html,拥有他们共同的核心代码。这适用于最新的api版本,对于较旧的非兼容版本,必须为它们重写代码。
另一个问题是,对于每个版本,我将不得不重新定义所有控制器的所有操作,但我们不能只让新版本控制器扩展旧版本,并仅覆盖所需的操作吗?