基本上都是通过路由控制器和动作链接起来的。
路由文件(your_app_root/config 中的 routes.rb 文件)有效地拦截传入的 url 并将该 url 映射到控制器/操作(实际上这是由像 Nginx 这样的 Web 服务器完成的,然后将请求传递到您的 Rails 应用程序通过独角兽之类的东西,但这完全是另一个问题)。
因此,对于标准的 HTML 站点设置,您可能有一个名为 home 的文件夹,在该文件夹中您可能有一个 index.html
因此,当您导航到 some_url/home/index 时,您将获得在浏览器中呈现的 index.html 文件的内容。
在 RoR 中,您需要一个路由来定义一个集合的获取请求(复数或不传入参数)
它可能看起来像这样
YourApp::Application.routes.draw do
get 'home', to: 'home#index', as: :home
# etc...
如果您导航到 some_url/home,该路由会将您的浏览器连接到 home 控制器上的 index 操作
home 控制器中的 index 动作可以只是一个空动作
class HomeController < ApplicationController
def index
end
end
如果您在 app/views/home 文件夹中有一个 index.html.erb,那么您将自动渲染该文件,因为 ActionController 会将您告诉它渲染的任何内容转换为 HTML、css 和 javascript 或 json 或 XML如果您正在使用资源路由并且它收到的请求是 XML 或 JSON 请求,并将结果数据发送回浏览器
如果您想从数据库中显示一些数据,那么控制器操作有责任获取该数据并将其填充到您的视图可以在视图中使用的对象(由 @ 符号表示的实例变量)中erb标签
例如
class HomeController < ApplicationController
def index
@some_records = SomeModel.all
end
end
然后可以像这样在 index.html.erb 文件中使用它
<ul>
<% @some_records.each do |rec| %>
<li> A record: <%=rec.some_method%> </li>
<% end %>
</ul>
因为您有一个路由,所以您可以使用路由名称作为链接和按钮的路径,以将数据从浏览器发布回服务器,整个过程从头开始。
这并不是对这一切如何结合在一起的严格描述,但它应该足够接近让您了解这一切是如何发生的