簡體   English   中英

是什么決定控制器動作的紅寶石導軌

[英]what determines controller action ruby rails

https://www.codecademy.com/zh-CN/courses/learn-rails/lessons/start/exercises/start-views上 ,控制動作稱為“ pages#home”:

Well done! Now when a user visits http://localhost:8000/welcome, the route

get 'welcome' => 'pages#home'

will tell Rails to send this request to the Pages controller's home action.

但是當我制作控制器時,我做了rails generate controller Pages大寫的rails generate controller Pages

pages_controller.rb:

class PagesController < ApplicationController

  def home
  end

end
  1. pages的一部分pages#home通過的第一部分確定pages_controller.rb ,無視_controller.rb結束了嗎?

  2. 如果我將pages_controller.rb更改為renamedpages_controller.rb但將類名保留為PagesController,會發生什么?

謝謝

當做出請求時,如: http://localhost:8000/welcome ,它相匹配的routeroutes.rb ,在此路由被映射到一個文件controller和一個action

在您的路線文件中,您具有:

get 'welcome' => 'pages#home'

get 'welcome'部分與url .../welcome匹配,並將此請求映射到pages#home ,其中pages是控制器名稱, home是一個動作(在pages_controller定義的方法)。 這是Rails的約定,以這樣的方式命名控制器: ControllerName_controller.rb 因此,基本上pages是控制器的名稱,而_controllers對於Rails應用程序中的每個控制器都是通用的。

接下來發生的是,控制器的此操作完成了一些工作並與model / database對話,並構建了將要傳遞給view的必需變量/數據。 根據Rails約定,必須有一個匹配的view文件,例如: home.html.erb ,它將響應呈現給瀏覽器。

還有其他方法可以以不同的方式呈現不同的partialsviews ,但是如果您遵循Rails約定,那么就很容易理解和使用Rails中的不同模型,視圖和控制器。 這稱為: 配置約定 當您遵循Rails約定來命名事物時,Rails會免費為您做大量工作和配置,以使您的生活更輕松。

當您的routes文件中有get 'welcome' => 'pages#home'時,則當請求: /welcome到來時,它將映射到pages_controller ,並會在app/controller/下查找pages_controller.rb文件。 如果將其重命名為其他名稱,則程序將無法按預期找到它,並且將引發錯誤,並且您的請求將無法完成。

控制器的名稱必須與該控制器的類名稱匹配,這也是Rails約定。 如果您更改其中任何一個,則將收到錯誤消息,並且您的請求將失敗。

動作控制器是MVC中的C。 在路由確定了要用於請求的控制器之后,您的控制器負責理解請求並產生適當的輸出。 幸運的是,Action Controller為您完成了大部分基礎工作,並使用智能約定使此操作盡可能簡單。

控制器命名約定

盡管並非嚴格要求,但Rails中控制器的命名約定傾向於對控制器名稱中的最后一個單詞進行復數處理(例如,ApplicationController)。 例如,ClientsController優於ClientController,SiteAdminsController優於SiteAdminController或SitesAdminsController,依此類推。

遵循此約定,將允許您使用默認的路由生成器(例如資源等),而無需限定每個:path或:controller,並使URL和路徑助手在整個應用程序中的用法保持一致。 請參閱Rails指南

  1. 是。 #home#home中的“動作”
  2. 您收到uninitialized constant PagesController錯誤

因此,控制器應始終采用在NameController定義的name_controller.rb形式,並在name_controller.rb作為公共方法進行NameController

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM