我正在从Michael Hartl的书中学习Ruby on Rails。我非常喜欢这种写作,结构清晰。不过,我对Rails 3.0和Rails 3.2版本之间的第3.3章差异有疑问:
PagesController
成为StaticPagesController
@Title
不再在控制器中初始化,而是在每个页面中@Title
变量通过“提供”功能初始化,并通过“yield”函数使用,而不是简单地插入<%= @title %>
是出于培训原因,还是RoR开发的最新最佳实践?
答案 0 :(得分:16)
PagesController成为StaticPagesController
没有理由。 PagesController很好。他这样做可能是为了清晰起见(?)。
@Title不再在控制器中初始化,而是在每个页面中
这是出于最佳做法/惯例的原因。请查看此问题Where does the meta content live in the MVC?
的答案@Title变量通过“提供”功能初始化,并通过“yield”函数使用,而不是简单地插入&lt;%= @title%&gt;
与上述答案相同。
有些人认为标题等元内容属于视图,因此应该在视图中设置,而不是在控制器中设置。
provide
和content_for
之间的实际差异在这里得到了很好的解释:http://api.rubyonrails.org/classes/ActionController/Streaming.html#module-ActionController::Streaming-label-Communication+between+layout+and+template
请注意,这些更改并非特定于Rails 3.2(Rails 3.1中provide
引入的stream
除外)。