基本上它都是通过路由控制器和操作链接的。
路由文件(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,该路线会将您的浏览器连接到家庭控制器上的索引操作
家庭控制器中的索引动作可以只是一个空动作
class HomeController < ApplicationController
def index
end
end
如果您在 app/views/home 文件夹中有一个 index.html.erb ,那么您将获得该文件自动渲染,因为 ActionController 会将您告诉它渲染的任何内容转换为 HTML、CSS 和 javascript 或 json 或 XML(如果您是)使用资源路由,它收到的请求是 XML 或 JSON 请求,并将结果数据发送回浏览器
如果您想从数据库中显示一些数据,那么控制器操作有责任获取该数据并将其填充到您的视图可以在 erb 标记中使用的对象(由 @ 符号表示的实例变量)中
e.g.
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>
因为您有一条路线,所以您可以使用路线名称作为链接和按钮的路径,将数据从浏览器发布回服务器,整个过程重新开始。
这并不是对这一切如何结合在一起的严格描述,但它足以让您了解这一切是如何发生的