一、心得體會
1、今天完成了什么?
- 5個(gè)小時(shí)看完了Rails-guide 4 ,遠(yuǎn)遠(yuǎn)沒有完成看一半的計(jì)劃,一個(gè)是內(nèi)容太多了,一個(gè)是遇到幾個(gè)難懂的問題,比如up和down、revert
- 1個(gè)小時(shí)看20個(gè)controller
2、今天收獲了什么?
之前在全站營學(xué)習(xí)的時(shí)候,完全是照著教材打幾遍,沒有看過任何和Rails相關(guān)的書籍,今天看了手冊, 知道了很多細(xì)節(jié)性的東西,以前是不知道為什么這么寫,現(xiàn)在就是在慢慢去明白為什么這么寫了。
20個(gè)controller:chatrooms、支付、物品、需求(demands)、采購(purchases)、出入庫(transfers)、盤點(diǎn)(inventories)、倉庫(warehouses)、供應(yīng)商(suppliers)、單位(units)、顏色(colors)、出入庫(transfers)
-
用戶(users)
- show
- new
- create
- update
連接(connection)
登錄(sessions)
驗(yàn)證(verifications)
resources里面的concerns是什么意思,比如
resources :chatrooms, concerns: :admin
重復(fù)利用
3、今天狀態(tài)如何?
今天上午看了Rails-guide的入門、Active Record章節(jié),學(xué)到了很多細(xì)節(jié)性的東西,看著很帶勁!PS:用mac編程簡直就是享受!
4、今天犯了哪些錯(cuò)誤?
今天玩了兩把榮耀、和全棧營的同學(xué)聊天,晚上的時(shí)候沒有集中精力。
5、明天還需要做哪些工作?
- 明天繼續(xù)看Rails-guide 4 爭取看200頁
- 20個(gè)controller
二、讀書筆記
第一章 Rails入門 預(yù)計(jì)10分鐘
主要內(nèi)容:
- 如何安裝Rails、新建Rails程序,如何連接數(shù)據(jù)庫
- Rails程序的基本文件結(jié)構(gòu)
- MVC和REST架構(gòu)的基本原理
- 如何快速生成Rails程序骨架
重點(diǎn):
1、文件夾
bin/ 存放Rails腳本,以及其他用來部署或運(yùn)行程序的腳本
congfig/ 路由、數(shù)據(jù)庫
config.ru 基于Rack服務(wù)器的程序設(shè)置,用來啟動程序。
public/ 唯一對外開放的文件夾,存放靜態(tài)文件和編譯后的資源文件
Rakefile 保存并加載可在命令行中執(zhí)行的任務(wù)。任務(wù)在Rails的各組件中定義,如果想添加自己的任務(wù),不要修改這個(gè)文件,把任務(wù)保存在lib/tasks
vendor/ 存放第三方代碼,經(jīng)常用來放第三方gem。
2、什么是eRuby
3、什么DSL(domain-specific language,領(lǐng)域?qū)僬Z言)
4、uninitialize constant ArticlesController
路由錯(cuò)誤,常量ArticlesController未初始化
5、只有public方法才能作為控制器的動作
6、什么是form_form(表單構(gòu)造器)

調(diào)用form_for方法時(shí),要指定一個(gè)對象,在上面的表單中,指定的是:articles,這個(gè)對象告訴form_for,這個(gè)表單是用來處理哪個(gè)資源的,F(xiàn)ormBuilder對象(f)創(chuàng)建了兩個(gè)標(biāo)簽和兩本文本字段。
7、Active Record很智能,能自動把數(shù)據(jù)表中的字段映射到模型的屬性上,所以無需再Rails的模型中聲明屬性,因?yàn)锳ctive Record 會自動映射
8、什么是運(yùn)行遷移?
遷移是一個(gè)Ruby類,能簡化創(chuàng)建和修改數(shù)據(jù)庫結(jié)構(gòu)的操作,Rails使用rake任務(wù)運(yùn)行遷移,修改數(shù)據(jù)庫結(jié)構(gòu)后還能撤銷操作,遷移的文件名有個(gè)時(shí)間戳。這樣能夠保證遷移按照創(chuàng)建的時(shí)間順序運(yùn)行。

在這個(gè)遷移中定義了一個(gè)名為change的方法,在運(yùn)行遷移時(shí)執(zhí)行,change方法中定義的操作都是可逆的,Rails直到如何撤銷這次遷移操作。運(yùn)行遷移后,會創(chuàng)建articles表,以及一個(gè)字符串和文本字段。
9、控制器

在Rails中,每個(gè)模型都可以使用各自的屬性初始化,自動映射到數(shù)據(jù)庫字段上,create動作中的第一行就是這個(gè)目的(還記得嗎?params[:article]就是我們要獲取的屬性)。@article.save的作用是把模型保存到數(shù)據(jù)庫中,保存完后轉(zhuǎn)向show動作。
10、添加數(shù)據(jù)驗(yàn)證
在開發(fā)模式下(默認(rèn)),每次請求Rails都會重新加載程序,因此修改之后無需重啟服務(wù)器。但是有的情況下需要重啟。比如重新安裝了一個(gè)gem
如果鏈接到同一個(gè)控制器中的動作,不用指定:controller選項(xiàng),因此默認(rèn)情況下使用的就是當(dāng)前控制器。
文件中沒有多少代碼,不過請注意,Article類繼承自ActiveRecord::Base,

在new動作中,添加了一個(gè)實(shí)例變量@article,如果不這么做,在視圖中@article的值就是nil,調(diào)用@article.error.any?
11、常見問題
使用Rails時(shí),最好使用UTF-8編碼存儲所有外部數(shù)據(jù),如果沒有使用UTF-8編碼,Ruby的代碼庫和Rails一般都是將其轉(zhuǎn)換成UTF-8,但不一定總能成功。
第二章 Active Record基礎(chǔ)
- 對象關(guān)系
- Active的作用
- 如何使用Active Record模型處理保存在關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)
- Active Record模式(schema)命名約定
- 數(shù)據(jù)庫遷移、驗(yàn)證、回調(diào)
1、Decimal
字段類型后面,可以在花括號中添加選項(xiàng),可用的修飾符如下:
- limit:設(shè)置string/text/binary/integer類型字段的最大值
- precision:設(shè)置decimal類型字段的精讀,即數(shù)字的位數(shù);
- scale:設(shè)置decimal類型字段小數(shù)點(diǎn)后的數(shù)字位數(shù);
- polymorphic:為belongs_to關(guān)聯(lián)添加type字段
2、change方法
change是遷移中最常用的方法,大多數(shù)情況下都能完成指定的操作,而且Active Record知道如何撤銷這些操作
- add_column
- add_index
- add_reference
- add_timestamps
- create_table
- create_join_table
- drop_table (必須提供代碼塊)
- drop_join_table (必須提供代碼塊)
- remove_timestamps
- rename_column
- rename_reference
- rename_table
3、使用reversible方法
Active Record可能不知如何撤銷復(fù)雜的遷移操作,這時(shí)可以使用reversible方法指定運(yùn)行遷移和撤銷遷移時(shí)怎么操作
4、使用up和down方法
在遷移中可以不用change方法,而用up和down方法。up方法定義要對數(shù)據(jù)庫模式做哪些操作,down方法用來撤銷這些操作,也就是說,如果執(zhí)行up后立即執(zhí)行down,數(shù)據(jù)庫的模式應(yīng)該沒有任何變化,例如在up中創(chuàng)建了數(shù)據(jù)表,在down方法中就要將其刪除,撤銷時(shí)最好按照添加的相反順序進(jìn)行。


如果遷移不可撤銷,應(yīng)該在down方法中拋出ActiveRecord::lrreversibleMigration異常。如果有人嘗試撤銷遷移,會看到一個(gè)錯(cuò)誤消息,告訴他無法撤銷。
撤銷之前的遷移
Active Record提供了撤銷遷移的功能,可以通過revert方法實(shí)現(xiàn):

revert方法還可接受一個(gè)塊,定義撤銷操作,revert方法可用來撤銷以前遷移的部分操作。
5、導(dǎo)出模式
部署新程序時(shí),無需運(yùn)行全部的遷移,直接加載數(shù)據(jù)庫結(jié)構(gòu)要簡單快速的多。
例如,測試數(shù)據(jù)庫是這樣建立的:導(dǎo)出開發(fā)數(shù)據(jù)庫的結(jié)構(gòu)(存入文件db/schema.rb或structure.sql),然后導(dǎo)入測試數(shù)據(jù)庫。
模式文件還可以用來快速查看Active Record中哪些屬性,模型中沒有屬性信息,而且遷移會頻繁修改屬性。
導(dǎo)出的模式文件類型
導(dǎo)出模式有兩種方法,由config/application.rb文件中的config.active.schema_format選項(xiàng)設(shè)置,可以是:sql或:ruby。
6、seed