如何知道rails资源使用show视图?

时间:2015-05-10 03:37:15

标签: ruby-on-rails

我正在查看本教程: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资源的各种请求。

enter image description here

我在这里有两个问题。

  1. RoR在访问/users/users/1等网址时如何知道实际使用indexshow方法的内容。

  2. 更重要的是, - 当调用show方法时,如何知道将show.html.erb视图提供给浏览器?如果我想返回不同的视图怎么办?

2 个答案:

答案 0 :(得分:1)

负责响应请求的调度操作的机制是路由器。您正如您所说,在config/routes.rb文件中定义了所有路由。此文件中的每一行都以明确的方式定义请求。 resources是定义一组路线的简写 - 所有路线listed here

有两个不同的请求 - URL和HTTP请求类型(GET,POST,PUT,DELETE)。基于这两件事,您可以清楚地将请求指向正确的控制器。看看这个:

get 'help' => 'static_pages#help'

这意味着:如果您收到针对值为get的网址的/help类型的请求,则会将请求发送给控制器static_pages及其操作helphelp行动中发生的事情是代码问题。

这也是你第二个问题的答案,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数据类型。