仍然很难使用RoR MVC方法

我认为应该公正地陈述我认为我所知道的以及我所做的事情:

1)我创建了应用程序并完成了我的第一次数据库迁移; 我知道有我的开发,测试和生产数据库。 dev db有一个名为’wines’的表。

2)我制作了一个创建必要文件的脚手架。

3)设置基本索引/更新/销毁方法,我可以浏览页面。

4)从我收集的内容,ActiveRecord类“Wine”自动从数据库inheritance属性? 每列都是一个属性,表’wines’中的每一行都是一个可能实例化的对象,可以从wine_controller脚本中调用。

我现在遇到的问题是我想创建一个所有控制器都使用的通用布局。 唯一会改变的是页面标题,标题中可能包含一些标记,属性(最有可能是javascript onload事件)以及标记内的任何内容。

我发现自己正在寻找能够做我想做的function(比如“favicon_link_tag”,“stylesheet_link_tag”和“auto_discovery_link_tag”……)但是找不到合适的地方给他们! 我知道这与我对如何执行/inheritance事物缺乏了解有关。 例如,如果我在application_controller.rb中声明@pageTitle并在ApplicationHelper中使用@pageTitle它将无法工作。 甚至在application_controller.rb中使用“stylesheet_link_tag”会引发错误。 我只是没有得到什么。

每个事物在时间执行,范围等方面与另一个事物有什么关系?

在“app / views”目录中有一个名为“layouts”的文件夹。 默认情况下,应该有一个“application.html.erb”文件,但如果没有,你可以创建它。

您的“应用程序”布局文件是任何视图使用的默认布局文件。 但是,如果您希望特定控制器使用不同的视图,则可以覆盖它。 看到这个railscast , 这个也很有帮助。

要理解的主要内容是,任何特定视图中的内容都将显示在yield方法在应用程序布局中出现的位置。 主’yield’块获取由控制器操作指定的视图文件,但您可以在任何视图中标记任何内容以将其传递给另一个yield块。 例如,您提供的“标题”示例可以传递到应用程序布局的头部。 有关详细示例,请参阅此railscast 。

有关更多信息,请阅读Rails指南 ,您可能需要考虑选择Rails入门书。

我用“ Beginning Rails 3 ”弄湿了脚,这是对框架的一个非凡的介绍。 这本书有几天了,这对我来说都很有意义,而且我的发展速度比以往任何时候都快。 一旦你了解它,Rails就会晃动,但绝对值得翻阅一本书。

请继续提问,如果可以,我会帮忙:)

-EDIT-要回答关于控制流的问题,它基本上是这样的:

  1. 您的浏览器发送特定URL的GET请求。

  2. 路由器接收该请求,将其与控制器操作匹配,触发该控制器操作,并向控制器提供与该请求相关的任何参数。 例如:如果您请求example.com/posts/123?color=red这将触发您的posts_controllerSHOW操作,并将{:color =>’red’}传递给params哈希。 你可以使用params[:color]访问它

  3. 控制器动作完成它的任务,当它完成时它会渲染输出。 默认情况下,它会呈现app//任何视图,并且将与适合请求的扩展名匹配(即,AJAX请求将触发.js.erb并且将触发GET请求.html.erb

    • 您可以使用render方法覆盖它,例如通过使用FooController的视图将render 'foo/bar'传递给渲染,使用Bar动作而不是当前操作。

    • 请注意,无论您呈现什么,视图可用的数据都是路由器触发的特定控制器操作中的任何内容,而不是“通常”呈现该视图的控制器操作。

  4. 使用调用它的控制器中的数据解析视图文件。 如果您有任何content_for方法,那么content_for块内的视图代码将转到您告诉它的位置,否则其他所有内容将转到application布局中的主YIELD块(或控制器指定的任何布局)。

  5. 解析应用程序布局,并将视图中的内容插入适当的区域。

  6. 该页面将提供给用户。

这在某些方面是简化,但我认为它回答了你的问题。 再次,随时随地问:)