ROR 应用程序如何选择在 return 行程中使用哪个视图?
How does an ROR app pick which View to use during the return trip?
目前正在 CodeAcademy 上学习 ROR,目前的流程:
- 创建 ROR 应用,
- 通过在 PagesCotnroller 中创建一个方法来修改 Controller class。
- 修改路由以将 'welcome' 请求指向 'pages#home' controller/method。
- (这是我感到困惑的地方,他们说:好的,现在是时候 mod 视图 (home.html.erb)...在文件夹 x/y/z 中找到它。但是在哪里在这个流程中,这个项目是否特别选择了 home.html.erb 文件与另一个视图。对于这个测试项目,文件夹中没有其他视图文件,但是如果有 20 个呢?我看到了第 2 步和第 3 步连接在代码中,那4呢?
这似乎是一个基本的问题,但我现在比较了解,然后在没有明确核心基础的情况下继续前进。
按照惯例。你甚至可以这样做:
# config/routes.rb
get `welcome`, to: 'pages#home'
# app/controllers/pages_controller.rb
class PagesController
end
# views/pages/home.html.erb
<h1>Hello world</h1>
由于 rails 是由 convention over configuration 的哲学驱动的,因此可以假设视图位于 pages/home.html.{erb|slim|haml}
。如果在那里找不到视图,它会向上查找树并查找 views/home.html.{erb|slim|haml}
。在这种情况下 ActionController::Base
将只渲染视图,即使控制器中没有任何动作。
默认情况下Rails 将在路由中指定的控制器名称中查找与控制器操作同名的视图。
所以您在 Pages 控制器下有 home 操作,这将导致 Rails 转到 home 操作,然后基于在操作中的代码上,它将呈现一个视图。
但您始终可以在控制器操作中指定要呈现的视图。最好有一个相似的名字,以免将来混淆。
PagesController < ApplicationController
def home
if five_min_window_is_still_open_after_creation?
# you need to have app/views/pages/show_with_edit.html.erb
render 'show_with_edit'
elsif timeup?
# you need to have app/views/pages/show_without_edit.html.erb
render 'show_without_edit'
# else
# it will render app/views/pages/home.html.erb
end
end
end
您也可以在 pages_controller.rb
的主页操作中呈现完全不同的视图:
class PagesController < ApplicationController
def home
# renders app/view/books/home.html.erb
render 'books/home'
end
end
目前正在 CodeAcademy 上学习 ROR,目前的流程:
- 创建 ROR 应用,
- 通过在 PagesCotnroller 中创建一个方法来修改 Controller class。
- 修改路由以将 'welcome' 请求指向 'pages#home' controller/method。
- (这是我感到困惑的地方,他们说:好的,现在是时候 mod 视图 (home.html.erb)...在文件夹 x/y/z 中找到它。但是在哪里在这个流程中,这个项目是否特别选择了 home.html.erb 文件与另一个视图。对于这个测试项目,文件夹中没有其他视图文件,但是如果有 20 个呢?我看到了第 2 步和第 3 步连接在代码中,那4呢?
这似乎是一个基本的问题,但我现在比较了解,然后在没有明确核心基础的情况下继续前进。
按照惯例。你甚至可以这样做:
# config/routes.rb
get `welcome`, to: 'pages#home'
# app/controllers/pages_controller.rb
class PagesController
end
# views/pages/home.html.erb
<h1>Hello world</h1>
由于 rails 是由 convention over configuration 的哲学驱动的,因此可以假设视图位于 pages/home.html.{erb|slim|haml}
。如果在那里找不到视图,它会向上查找树并查找 views/home.html.{erb|slim|haml}
。在这种情况下 ActionController::Base
将只渲染视图,即使控制器中没有任何动作。
默认情况下Rails 将在路由中指定的控制器名称中查找与控制器操作同名的视图。
所以您在 Pages 控制器下有 home 操作,这将导致 Rails 转到 home 操作,然后基于在操作中的代码上,它将呈现一个视图。
但您始终可以在控制器操作中指定要呈现的视图。最好有一个相似的名字,以免将来混淆。
PagesController < ApplicationController
def home
if five_min_window_is_still_open_after_creation?
# you need to have app/views/pages/show_with_edit.html.erb
render 'show_with_edit'
elsif timeup?
# you need to have app/views/pages/show_without_edit.html.erb
render 'show_without_edit'
# else
# it will render app/views/pages/home.html.erb
end
end
end
您也可以在 pages_controller.rb
的主页操作中呈现完全不同的视图:
class PagesController < ApplicationController
def home
# renders app/view/books/home.html.erb
render 'books/home'
end
end