iT邦幫忙

1

Rails基本介紹(二)

  • 分享至 

  • xImage
  •  

聽音樂先~

Yes


Rails操作實體

接續前一篇文章,做出一個實體後。

專案中

  project_name/config/route.rb

這個檔案為設置路徑使用。
專案中,所有的實體資料儲存於DB中,簡單一點想,路徑就是告知電腦調動資料時,有哪些"管道"可以傳送。
設計上,modle名為為主幹道,有需要的額外管道就會在主幹道底下設置。

一樣,我們先用快速指令設定。

#project_name/config/route.rb

Rails.application.routes.draw do
  resources :roles
end

書上或很多資料都會告知,這個寫法能直接做出8個路徑對應七個方法,這七個方法,就是REST風格中希望我們在資料調動上盡量遵照的。

命名使用model的複數。

我自己在路徑上的想法是,Route就是路徑名,但是路怎麼設計還是由Controller處理,我們告知電腦,我們要走哪條路,路名指向的是controllet給的方法,方法等於這條路上會把資料做什麼處理(action)。

這時已經可以先使用

$ rails server
#請偷懶打rails s即可

指令開啟伺服器。

而瀏覽器理所當然因為沒有controller會出錯。

uninitialized constant RolesController

一樣以指令快速建立controller,請記得建立controller時名稱與model的名稱"複數處理",所以在命名上盡量以英文文法中有複數的單字處理較方便。

$ rails g controller roles

一樣觀察Rails會自動幫忙建立一些檔案及資料匣,比較特別的可以發現view資料匣與controller聯動。

先看看controller的檔案,如下。

#app >controllers > roles_controller.rb
class RolesController < ApplicationController
  
end

這時可以回網頁畫面,輸入

http://localhost:3000/roles

沒更改預設port的話都是3000。

基本上應該也還是一堆紅字出現

Unknown action
The action 'index' could not be found for RolesController

Rails非常貼心,會告知你少什麼,那我們少什麼就做什麼。

回到controller

#app >controllers > roles_controller.rb
class RolesController < ApplicationController
  def index
  
  end
end

對伺服器重整後,應該出現以下警訊。

No template for interactive request
RolesController#index is missing a template for request formats: text/html

是的,沒有view。那我們繼續做view。

請於app/views/roles再新增檔案index.html.erb。
可以新增index.html也可以,但初學且既然我們是用Rails,請就是記得加erb。

何為erb?

可於html中輸入ruby語法的檔案。

檔案中可以輸入任何你會的中英文或html。
重整瀏覽器,畫面就會出現你輸入的內容。
https://ithelp.ithome.com.tw/upload/images/20210812/20135887JBIRiXlGRq.png

接著我們回到一下Rails的console,直接操作後台建立一個實體並存檔。

$ rails c

輸入

2.7.3 :001 > player = Role.create!
   (0.7ms)  SELECT sqlite_version(*)
  TRANSACTION (0.1ms)  begin transaction
  Role Create (0.7ms)  INSERT INTO "roles" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", "2021-08-12 12:49:56.795342"], ["updated_at", "2021-08-12 12:49:56.795342"]]
  TRANSACTION (0.8ms)  commit transaction
 => #<Role id: 3, created_at: "2021-08-12 12:49:56.795342000 +0000", updated_at: "2021-08...

完成後可輸入

2.7.3 :002 > Role.all

確認有無完成。

再回到controller。

class RolesController < ApplicationController
  def index
    @roles = Role.all
  end
end

更改view內容

<h1><%= @roles %></h1>

回到瀏覽器後就會發現你建立的實體被真正調閱出來了。
可以發現,我們調動實體資料時,如果沒有特別做處理,其實是調動一整個記憶體給你。

多輸入以下觀察。

<h1><%= @roles.first.id %></h1>
<h1><%= @roles.first.created_at %></h1>

first是ruby本來就有的語法。
id與created_at是之前建立資料表,資料庫本身就有的,所以資料的名稱也等於一個實體方法。(呼叫資料的值)

<% %>與<%= %>是erb檔案才能輸入的,是讓view在指定區塊執行ruby語法,有沒有=符號,代表要不要顯示出來,如果不理解,請先記憶,如果我們要"看到"資料,請用<%= %>。

整理後

出現這三個字,代表前面的都可以不用看,科科

Rails的架構是MVC架構。

Rails中的model還包含了DB要注意,所以對資料庫操作熟練,model的部分才能展現的更好。Ruby語法熟練才能讓資料庫(類別)設計上更靈活。

Rails中的controller與view黏合得更近。controller包含了route要注意,語法熟練可以讓人與電腦間的溝通管道更順暢。view雖然感覺上較看重前端技能,但是不熟悉model與controller可以給予什麼資料,空有外殼沒有正確內容是沒有用的。


混打字數的一篇..
還是沒想到怎麼介紹Rails...


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言