寫出基本有新增修改功能的網頁。
專案名就取名叫Bookstore,路徑名就叫book,table欄內有標題:title跟內容:content,價格:price
$rails new Bookstore
首先一切的開頭從Route開始。
打開config/routes.rb
Rails.application.routes.draw do
resources :books
end
在終端輸入看一下路徑$rails routes -c books
Perfix在rails可以說是超聯結的名字,例如最上面的books,只要在後面加上_path,也就是books_path,就可以連到index那裡去。
如果Perfix上沒有寫的那就是默認同上,例如你要找最下面destroy,那就是book_path,但是後面要加上method,method要寫的就是Perfix旁的Verb。
也就是book_path, method: "delete"
常用Perfix_path的有 超連結link_to,轉址redirect_to,以及form_tag、form_with 方法。
在終端機輸入$rails g controller books
g是generate的縮寫,工程師偷懶是美德,寫個g就好
這個指令會幫我們創出好幾個東西,其中最常用的兩個:
一個是controller,在app/controllers/幫你建立books_controller.rb。
當然你也可以自己手打
class BooksController < ApplicationController
end
要注意的是在class的books_controller會寫成大寫BooksController。可以看到BooksController引繼ApplicationController。
application_controller.rb是所有controller的最上層,因此如果有個方法想要所有controller都會使用到的話,就可以寫在這裡。
打開application_controller.rb
class ApplicationController < ActionController::Base
end
可以看到ApplicationController < ActionController::Base,ActionController::Base是Rails這個框架在背後做事情的地方,也就是我們能接觸的最上層就只到ApplicationControlle
另一個幫我們創出的是在app/views幫我們創出books這個資料夾,
我們可以在這個資料夾建立controller裡面action所對應的action.html.erb。在controller的action會有內建的render,默認render到他的action.html.erb。
render這個方法他並不是轉網址路徑,而是借用views的html.erb所寫的畫面去做渲染。
在終端機輸入
$rails g model Book title:string content:text price:integer
:string是默認設定可以省略,string能存入的字數有限,所以內容content用text能寫很多的字。integer則是限制輸入的是數字,如果你在裡面打文字會變成0。
可以寫成
$rails g model Book title content:text price:integer
這個指令會幫我們生出兩個重要的東西,一個是在app/models的book.rb也就是book的model。
另一個則是在db/migrate建立的migration:20220813183516_create_books.rb,名字前面會是一團數字。
打開它可以看到我們要對資料庫所建立的table設定。這時候只有設定,還沒建立起來。
class CreateBooks < ActiveRecord::Migration[6.1]
def change
create_table :books do |t|
t.string :title
t.text :content
t.integer :price
t.timestamps
end
end
end
可以注意到的是Class上面的是大寫,而table名則是小寫。
這就是在rails的慣例。在rails有著慣例優於設定的法則,
只要大家都遵循著相同的慣例,一起做專案就會很方便。
另外在rails會有一欄默認的id,也就是流水編號。
t.timestamps會建立兩個欄位created_at與updated_at這兩個時間欄位,分別代表著創立時間與修改時間,所以在這張table總共建立了六個欄位。
再來就是要把這張table做具現化
在終端機輸入
$rails db:migrate
這個指令會在資料庫建立一個叫books的table。如果資料庫還沒建立,他會生成一個叫development.splite3的資料庫。
我們可以在這裡看到table裡有哪些資料,當然現在才剛建立,裡面一筆資料都沒有。
若是使用其他資料庫的,也可以用rails console去查看。
另外這指令還會生成一個叫schema.rb檔案,上面會寫上目前table的設定,因為我們可以再創立migration去對table做更改,所以直接看20220813183516_create_books.rb是不準確的。所以才要用schema.rb去紀錄table的設定。
schema:
ActiveRecord::Schema.define(version: 2022_08_13_183516) do
create_table "books", force: :cascade do |t|
t.string "title"
t.text "content"
t.integer "price"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
end
``