Ruby on Rails - 没有视图的控制器

时间:2015-12-24 22:44:43

标签: ruby-on-rails

我在Ruby on Rails中的新功能。通常我会使用其他网络语言,现在(当然)我尝试将其与在网络上使用的其他语言进行比较。

但有时候我有一些问题需要理解Ruby on Rails的哲学和特性。当然我理解MVC的概念。

但现在我不确定: 是不是可以创建和使用没有视图的控制器?在某些情况下,你需要一个"类"对于其他控制器使用的一些有用的功能,他们有视图。或者使用模块是一种更好的风格?

我尝试通过阅读大量文章和示例来找到它,但没有找到有关此内容的详细信息。

4 个答案:

答案 0 :(得分:3)

在开发Ruby On Rails应用程序时,建议将大多数业务逻辑放在模型中,因此对于控制器,逻辑需要最小提供视图的信息,因此如果它没有查看您需要控制器的可能性非常低。

答案 1 :(得分:1)

  

创建和使用没有视图的控制器是否可以

是的,没关系。

要记住的关键是Ruby / Rails是object orientated

这意味着您对控制器/模型等所做的每一件事都应该具有您正在操作的“对象”。

考虑到这一点,这意味着您可以拥有一个没有相应视图的控制器,因为有时您只需要操作一个对象并返回一个简单的响应(例如使用Ajax)。

-

我们经常为不同的操作重复使用视图(这会被视为没有视图):

#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   def search
      render :index, layout: false
   end
end

skinny controller, fat model的概念原则上是合理的,你必须考虑到你可能需要只能 由控制器处理的小部分功能的时间:

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def update
      @user = User.find params[:id]
      @user.update
      respond_to do |format|
        format.js {render nothing: true}
        format.html
      end
   end
end

Rails的一个非常基本的例子是驱动器:

  • view =输入接口
  • controller =接受订单&amp;递送
  • model =在后端获取订单包装等

有时控制器可能不需要视图(例如,如果您使用特定的节食要求更新订单),因此每个控制器操作必须具有视图的概念都是错误的。

这真的是让您的控制器具有足够的通用性来正确管理您的对象。

答案 2 :(得分:0)

共享控制器方法可以放在ApplicationController中。此外,在Rails 4中存在一些问题(app / controllers / concerns /),您可以在这些问题中使用可由多个控制器使用的方法来放置模块。

答案 3 :(得分:-1)

控制器处理请求并呈现相应的视图模板。所以没有视图的控制器绝对是无稽之谈。

每次请求都会执行这个控制器时,它只会以缺少模板错误结束,所以你需要创建一个视图文件夹,并在其中放入带有动作名称的空文件,这显然是愚蠢的。