中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Rails、MVC及最常用的Rails命令有哪些

發布時間:2021-10-25 17:00:42 來源:億速云 閱讀:168 作者:iii 欄目:web開發

本篇內容主要講解“Rails、MVC及最常用的Rails命令有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Rails、MVC及最常用的Rails命令有哪些”吧!

Rails是什么?

Rails是一種web應用框架。根據模型-視圖-控制器(MVC)模式,它包括了創建數據庫支持的web應用程序時所需的所有內容。MVC將應用分為三層:模型、視圖和控制器,每一層都有特定任務。

Rails、MVC及最常用的Rails命令有哪些

模型-視圖-控制器(MVC)結構示意圖

模型層

模型層代表領域模型(如Account、Product、Person、Post等),概述應用程序中特有的業務邏輯。

在Rails中,數據庫支持的模型類源于 ActiveRecord::Base。Active  Record支持用戶將數據庫行的數據表示為對象,并使用業務邏輯方法修飾這些數據對象。大多數Rails模型由數據庫支撐,模型也可以是Ruby普通類或實現由  Active Model模塊提供的一組接口的Ruby類。

控制層

控制層的功能在于處理傳入的HTTP請求以及給出適當響應。通常這一層意味著返回HTML,但Rails控制器還可以生成XML、JSON、PDF、移動專用視圖及其他格式。

控制器加載和操作模型,并呈現視圖模板,以便生成適當的HTTP響應。在Rails中,傳入要求由Action Dispatch發送至相應控制器,控制類來自  ActionController::Base。Action Dispatch和Action Controller一起綁定于Action Pack中。

Rails、MVC及最常用的Rails命令有哪些

圖源:unsplash

視圖層

視圖層由“模板”組成,主要負責提供應用程序資源的適當描述。模板可以有多種格式,但大多數視圖模板都是帶有內嵌Ruby代碼的HTML(ERB  文件)。視圖通常生成控制器響應,或生成電子郵件正文。在Rails中,視圖生成由Action View處理。

開發一款新型Rails應用

首先從頭構建一個應用程序,這步之前要確保系統內裝有Ruby、RubyGems和Bundler。打開終端導航到一個有權限創建文件的目錄。先要做的是安裝Rails并通過運行railsnew命令構建一個新型Rails應用程序。

要從頭開始創建只支持API的Rails,創建時--api應在Rails應用程序名稱之后:railsnew<my_app_name>  --database=postgresql --api  (使用Postgresql數據庫配置應用程序更為容易,但別忘了在運行命令前安裝這一數據庫)。例如:rails new Gallery  --database=postgresql &ndash;api。

通過使用 --api  旗標,Rails能夠刪除許多默認功能和中間件(大多是涉及無用的瀏覽器)。控制器繼承ActionController::API而非ActionController::Base,生成器會跳過生成視圖。為只支持API的Rails構建設置資源無須作任何改變。

將所有所需gem添加至Gemfile中后開始運行bundle install。

  • 初始化數據庫:rails db:create

  • 運行Rails服務器:rails s

Rails生成

Rails團隊的首要目標是高效地構建核心應用程序功能。Rails系統擁有大量生成器,能幫助用戶完成一些手動作業。生成器除了節省時間,還有一些其他優點:

  • 生成器能夠為應用程序測試套件設置基本規格。它們會為用戶提供一些基本例子而非編寫復雜的邏輯測試。

  • 經設置,生成器的運行方式保持不變,這樣便能標準化代碼并幫助用戶更有效地開發,原因在于用戶不必過多擔心手寫代碼時可能會出現的拼寫、語法錯誤或其他相關漏洞。

  • 生成器遵循Rails最佳操作,包括使用RESTful命名模式、刪除重復代碼、使用部分和許多其他最佳類型設計模式。

然而,某些生成器會創建相當多的代碼。如果不使用某個代碼,它就會造成應用程序代碼不必要的混亂,從而給以后的程序員帶來困擾。所以何時使用生成器最好呢?所有Rails生成器作為命令輸入終端,并遵循下列語法:

rails generate <name of generator> <options>--no-test-framework

--no-test-framework  是一個旗標,意在提醒生成器不要為新生成模型和控制器等創建任何測試。當用戶運行自己的Rails應用程序時則不需要旗標,這十分有助于快速建立測試套件。

為了提高效率,Rails將generate 方法簡化為g,因此上述CLI命令可以簡化為:

rails g <name of generator> <options>--no-test-framework

Rails、MVC及最常用的Rails命令有哪些

圖源:unsplash

下列是Rails提供的主要生成器。筆者將分別舉例說明:

遷移生成器

Rails有一組遵守規范的優質遷移生成器,能夠有效管理數據庫模式。繪制域模型后可以進行下一步。首先使用案例庫應用程序中的數據庫遷移并更新 painters  表。運用下列命令在表中添加一列,將其命名為portrait:

railsg migration add_portrait_to_painters portrait:string --no-test-framework

終端顯示創建了遷移文件20200928055457_add_portrait_to_painters.rb.。由于遷移文件名不得重復,生成器會在文件名前加上時間戳。神奇的事情發生了&mdash;&mdash;打開db/migrat  目錄中創建的文件,它現在應該是這樣:

class AddPortraitToPainters < ActiveRecord::Migration[6.0]    def change      add_column :painters, :portrait,:string    end end

注意到生成器的作用了嗎?它自動感知到用戶想添加一個新的列,構建了add_column 方法調用。這是如何做到的?

實踐證明,命名遷移文件的方法至關重要。通過在名稱前加上add_文本,它向遷移生成器發送了一個信號,即這種模式更改的目的是向表中添加一列/多列。

那么它是如何知道用戶想在哪個表上添加的呢?它將_painters 文本附加到遷移名稱的末尾,以此告訴Rails用戶想更改的表格是 painters  表。最后,通過在命令末尾添加 portrait:string 文本告知生成器新的列的名稱為portrait,數據類型為 string。

用戶可以通過運行rails db:migrate 更新數據庫模式,該模式也會反映出這次變更。

刪除列則可以運行另外一個遷移:

railsg migration remove_portrait_from_painters portrait:string

如果打開此遷移文件則會看到下列代碼:

class RemovePortraitToPainters < ActiveRecord::Migration[6.0]    def change      remove_column :painters, :portrait,:string    end end

運行rails db:migrate 后,模式也會得到更新。當需要運行任何未決遷移時可以使用這一命令。

  • railsdb:migrate:reset:它會刪除數據庫信息,在新的數據庫運行遷移并重新加載種子數據。

  • railsdb:seed:將數據從文件:db/seeds.rb加載到數據庫中。這種方法對用Rails項目所需的初始數據填充數據庫十分有用。

  • railsdb:rollback:回滾上次執行的遷移。它會撤銷上一次遷移,接著用戶便可編輯文件并重新運行 rails db:migrate  。注意,進行過程中謹慎使用這一命令,因為它極具破壞性,很有可能造成數據丟失。運行時一定確保自己完全清楚運行后的結果。

模型生成器

這是一種經常使用的生成器類型。它適用于編寫創建模型和關聯數據庫表所需的核心代碼,且不會使應用程序過于復雜。一般來說需要模型名稱(單數和首字母大寫)和模型參數。

接下來為帶有 name、bio和 genre列的Painter 應用程序添加一個新模型,可以通過以下CLI命令使用模型生成器:

railsg model Painter name:string genre:string bio:text

如果數據類型為字符串,則不需要在列名后指定類型,因為它是默認數據類型。因此如下:

railsg model Painter name genre bio:text

因其水平較高,這一步已經創建了:

  • 添加一個表格和name、genre和 bio列的數據庫遷移

  • 繼承ApplicationRecord (自Rails 5起)的模型文件

我們接下來創建另一個屬于Painter的模型Painting:

railsg model Painting name image painter:belongs_to

切記首先生成具有has_many宏命令的代碼;在運行遷移時只有帶有belongs_to 的代碼有用,否則會得到錯誤代碼:

ActiveRecord::StatementInvalid:PG::UndefinedTable: ERROR: relation "<some table name>" doesnot exist

運行這一生成器會創建出一個遷移文件和 Painter  和Painting模型。這一特定的生成器創建了一些具有單命令的不同的功能,且僅用最簡單的代碼就生成出來。接著轉向自己的模型,確保建立適當關系(has_many,  belongs_to)。

下一步是創建一個遷移:rails db:create 和 rails db:migrate來遷移表格。用戶可以在控制臺中測試連接,只需要運行rails  c并創建一些新的例子,不論正確與否都可以測試驗證;接下來測試關聯度(如Painter.all.first.painting能夠檢查第一個painter的painting)

Rails、MVC及最常用的Rails命令有哪些

圖源:unsplash

控制生成器

運行rails g controller 命令會提供一個控制文件(用于添加適當操作)和相應的視圖文件夾:

railsg controller paintings

資源生成器

如果用戶在在創建API過程中使用前端MVC架構,或只想手動創建視圖,resource生成器是編寫代碼的一個優選。創建Painting資源:

railsg resource Painting name image painter:belongs_to

因為沒有為name和image 編寫數據類型,因此默認情況下它是一個字符串。添加 painter:belongs_to  來指定兩個表格的關系,并在paintings表格中設置一列 painter_id。也可以使用 references編寫上述命令(結果一樣):

railsg resource Painting name image painter:references

這是為不同模型編寫相同命令的另一個例子:

railsg resource Answer content correct_answer:boolean question:belongs_to

憑借生成器,目前的應用程序擁有什么?

  • 一個遷移文件,能夠在生成器中為傳遞給它的屬性創建一個新的數據庫表

  • 繼承ApplicationRecord的模型文件(從Rails 5開始,見上述注意事項)

  • 繼承了ApplicationController的控制器文件

  • 不帶有視圖模板文件的視圖目錄

  • 視圖helper文件

  • 用于該控制器的特定JavaScripts的Coffeescript文件

  • 用于控制器樣式的 scss文件

  • routes.rb文件內的完整資源調用

resource生成器是一種智能生成器,創建全功能資源所需的一些核心功能,同時不會導致過多代碼膨脹。

路由

Rails、MVC及最常用的Rails命令有哪些

圖源:unsplash

最后一項可能不太常見。通常resources:paintings被視作為一個“魔法”路由,它包含在應用程序中執行CRUD所需的全部RESTful路由。那么resources:paintings會轉化成什么?用濾波器運行  rake routes 會比較簡單,這樣就只會呈現paintings的路由:

rake routes | grep painting

resources自動創建每個路由并使其對控制器可用。打開paintings_controller.rb文件會很有趣:路由列表中出現的操作都不存在。它創建的代碼非常少,只需添加應用程序需要的功能。

Scaffold生成器

rails g scaffold User username:string

到此,相信大家對“Rails、MVC及最常用的Rails命令有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五家渠市| 博兴县| 渭源县| 屯昌县| 西藏| 荃湾区| 化州市| 鸡西市| 驻马店市| 沂水县| 开鲁县| 翁源县| 吉首市| 离岛区| 和林格尔县| 重庆市| 秀山| 张家口市| 南安市| 玉环县| 潍坊市| 武汉市| 淳安县| 陈巴尔虎旗| 拜泉县| 洞头县| 高雄县| 湾仔区| 英德市| 抚顺县| 民勤县| 玉山县| 万荣县| 昌都县| 社旗县| 民丰县| 资溪县| 彝良县| 珲春市| 明星| 绥中县|