控制器为何?

时间:2015-08-27 20:14:19

标签: ruby-on-rails controller sinatra

我花了很多时间在sinatra上进行开发,这对我来说很好,因为我只从事小型项目并且规模不是问题。现在我需要使用rails,结构对我来说有点混乱。我理解当我键入localhost:3000/images rails时会查找routes.rb中的路由(例如get 'images#index'),然后转到控制器images然后在图像中查找{{1}函数,最后找到index视图并呈现它。

为什么所有这些变化都必要?它不像sinatra(它似乎只包括主文件中的控制器步骤)更简单吗?在一个答案中,我正在寻找为什么最好以rails的方式做到这一点,包括具体原因,优点和缺点以及示例。

提前致谢!

2 个答案:

答案 0 :(得分:3)

Konstantin Haase是Sinatra的当前维护者,并认为他们都适合不同类型的应用程序:

  

他们都在解决一系列不同的问题,即使他们   确实重叠。虽然Rails是一个专注于编写模型的框架   驱动Web应用程序,Sinatra是一个处理HTTP的库   从服务器端。如果你考虑HTTP   请求/回应,Sinatra是理想的工具。如果你需要满员   集成和尽可能多的样板,Rails是通往的方式   去。

David Heinemeier Hansson也认为这两者都有空间,但感觉应用程序的大小会影响使用哪个应用程序:

  

Sinatra非常适合微型风格,而Rails则不然。只要你   保持微观,Sinatra将击败Rails。如果你超越微,Rails   将击败Sinatra。

所以,基本上,Sinatra和Rails是不同的,它们有不同的用例。 Rails是一个开源的全栈Web应用程序框架。它遵循流行的 MVC框架(模型,视图,控制器)模型,并以其“约定优于配置”方法应用程序开发而闻名。因此,正如您所见,controller是Rails的一部分。

您可以找到许多描述Rails和Sinatra之间差异的文章及其用例。这里有几个有趣的博客:

Rails vs. Sinatra

Rails vs. Sinatra by Example

答案 1 :(得分:3)

K M Rakibul Islam的答案很棒。您也可以查看Rack。 Rails和Sinatra都是建立在它上面的。 Rack是一个Web服务器接口,需要一个" app"成为一个Ruby对象,通过一个名为call的方法获取请求哈希,然后使用包含http响应代码,http头和响应主体的数组进行响应。它非常准确。看看Rack可能会让你更好地理解两者是如何分开的 - 如果你对#34感兴趣,那么"而不是"为什么"。