我正在查看本教程:https://www.railstutorial.org/book/sign_up
我们开始使用rails资源。
配置/ routes.rb中
Rails.application.routes.draw do
root 'static_pages#home'
get 'help' => 'static_pages#help'
get 'about' => 'static_pages#about'
get 'contact' => 'static_pages#contact'
get 'signup' => 'users#new'
resources :users
end
应用/控制器/ users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
end
end
应用/视图/用户/ show.html.erb
<%= @user.name %>, <%= @user.email %>
还有一个方便的表格,告诉我们ruby将如何处理对Users
资源的各种请求。
我在这里有两个问题。
RoR在访问/users
,/users/1
等网址时如何知道实际使用index
,show
方法的内容。
更重要的是, - 当调用show
方法时,如何知道将show.html.erb
视图提供给浏览器?如果我想返回不同的视图怎么办?
答案 0 :(得分:1)
负责响应请求的调度操作的机制是路由器。您正如您所说,在config/routes.rb
文件中定义了所有路由。此文件中的每一行都以明确的方式定义请求。 resources
是定义一组路线的简写 - 所有路线listed here。
有两个不同的请求 - URL和HTTP请求类型(GET,POST,PUT,DELETE)。基于这两件事,您可以清楚地将请求指向正确的控制器。看看这个:
get 'help' => 'static_pages#help'
这意味着:如果您收到针对值为get
的网址的/help
类型的请求,则会将请求发送给控制器static_pages
及其操作help
。 help
行动中发生的事情是代码问题。
这也是你第二个问题的答案,Rails如何知道它应该呈现什么模板。假设我们仍在处理help
动作的上述示例。如果此操作没有显式render
调用,则Rails将使用其约定优于配置并搜索将在目录中称为控制器的模板,并在文件名中搜索操作名称。因此,它将呈现app/views/static_pages/help.html.erb
中的文件。另一方面,开发人员可以使用明确的其他文件名来呼叫render
,例如:render "products/show"
。
如果您想了解更多信息,请查看这两个Rails指南:
答案 1 :(得分:0)
rails比配置更具惯例。这是Rails中最强大的功能之一。另一种方式。智能且代码少。这里当你说方法名称为show时。默认情况下,rails将查找show.html.erb。如果要显式呈现其他视图。您可以在控制器方法中执行此操作
渲染:new_view_name
关于路线。
资源:用户
当我们有Rest调用,crud operations.it为crud创建7个url时,这非常有用。它的区别取决于http数据类型。