【发布时间】:2011-12-11 05:11:27
【问题描述】:
我有一个模型,我想通过两组视图公开,并根据所使用的视图执行不同的逻辑。
这方面的一个例子可能是有一个控制器/视图集用于提供 Web 界面,而另一个控制器/视图集用于提供桌面或移动或其他类型的界面。
这是一个两部分的问题:
1) 让多个控制器共享一个模型在风格上“可以”吗?
2) 我将如何在现有模型中添加另一个控制器?
【问题讨论】:
标签: ruby-on-rails model-view-controller
我有一个模型,我想通过两组视图公开,并根据所使用的视图执行不同的逻辑。
这方面的一个例子可能是有一个控制器/视图集用于提供 Web 界面,而另一个控制器/视图集用于提供桌面或移动或其他类型的界面。
这是一个两部分的问题:
1) 让多个控制器共享一个模型在风格上“可以”吗?
2) 我将如何在现有模型中添加另一个控制器?
【问题讨论】:
标签: ruby-on-rails model-view-controller
当然,没关系 - 如果它们如此不同,以至于仅向其中添加操作并不能在技术上或认知上将它们充分分开,为什么不呢?
您可以通过多种方式对其进行配置; routing guide 涵盖了所有这些 - 使用哪个取决于多种因素。
【讨论】:
如果您只关心视图,则给定的控制器可以呈现不同的视图。 RoR 是 RESTfull,因此您可以根据客户端的要求(FAT、Mobile 或 Web)使您的控制器呈现视图。
如果您有非常不同的逻辑,那么是的,您可以在模型对象上使用另一个控制器。
【讨论】:
如果您只想根据客户端小部件更改 css 以使您的网站更适合智能手机、触摸板等...我建议您阅读 sth。关于包含样式表时的媒体选项:
【讨论】:
如果您只需要一两个操作,我建议您将它们全部保存在同一个控制器中。没有必要让事情变得过于复杂。如果您需要为每个控制器提供一整套 REST 操作,以下是我将如何执行的示例:
假设您正在运行一个也有组的活动网站。事件可以在组的上下文中创建、编辑等,或者完全独立。让我们看看几个需要完整 REST 操作的 URL:
/groups/1/events # Lists all events associated with a group
/events # Lists all events
这样设置路线:
resources :events
resources :groups do
resources :events, :controller => 'groups/events'
end
您现在将拥有两个控制器。一个住在app/controllers/events_controller.rb,另一个住在app/controllers/groups/events_controller.rb
最后一个重要的细节是命名第二个控制器:
class Groups::EventsController < ApplicationController
您可以使用内置生成器的 rails 来做到这一点:
rails g controller 'groups/events'
【讨论】: