我在Ruby on Rails中的新功能。通常我会使用其他网络语言,现在(当然)我尝试将其与在网络上使用的其他语言进行比较。
但有时候我有一些问题需要理解Ruby on Rails的哲学和特性。当然我理解MVC的概念。
但现在我不确定: 是不是可以创建和使用没有视图的控制器?在某些情况下,你需要一个"类"对于其他控制器使用的一些有用的功能,他们有视图。或者使用模块是一种更好的风格?
我尝试通过阅读大量文章和示例来找到它,但没有找到有关此内容的详细信息。
答案 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)
控制器处理请求并呈现相应的视图模板。所以没有视图的控制器绝对是无稽之谈。
每次请求都会执行这个控制器时,它只会以缺少模板错误结束,所以你需要创建一个视图文件夹,并在其中放入带有动作名称的空文件,这显然是愚蠢的。