【问题标题】:How do I add a second Controller to an existing Model in Ruby on Rails?如何在 Ruby on Rails 中向现有模型添加第二个控制器?
【发布时间】:2011-12-11 05:11:27
【问题描述】:

我有一个模型,我想通过两组视图公开,并根据所使用的视图执行不同的逻辑。

这方面的一个例子可能是有一个控制器/视图集用于提供 Web 界面,而另一个控制器/视图集用于提供桌面或移动或其他类型的界面。

这是一个两部分的问题:

1) 让多个控制器共享一个模型在风格上“可以”吗?

2) 我将如何在现有模型中添加另一个控制器?

【问题讨论】:

    标签: ruby-on-rails model-view-controller


    【解决方案1】:

    当然,没关系 - 如果它们如此不同,以至于仅向其中添加操作并不能在技术上或认知上将它们充分分开,为什么不呢?

    您可以通过多种方式对其进行配置; routing guide 涵盖了所有这些 - 使用哪个取决于多种因素。

    【讨论】:

      【解决方案2】:

      如果您只关心视图,则给定的控制器可以呈现不同的视图。 RoR 是 RESTfull,因此您可以根据客户端的要求(FAT、Mobile 或 Web)使您的控制器呈现视图。

      如果您有非常不同的逻辑,那么是的,您可以在模型对象上使用另一个控制器。

      【讨论】:

        【解决方案3】:

        如果您只想根据客户端小部件更改 css 以使您的网站更适合智能手机、触摸板等...我建议您阅读 sth。关于包含样式表时的媒体选项:

        http://www.w3.org/TR/CSS2/media.html

        【讨论】:

          【解决方案4】:

          如果您只需要一两个操作,我建议您将它们全部保存在同一个控制器中。没有必要让事情变得过于复杂。如果您需要为每个控制器提供一整套 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'
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多