Ruby on Rails 探索 inverse_of
inverse_of
主要功能會去通知對方自己的狀態,可以解決物件不同步的問題。
在 belongs_to 裡的 :inverse_of 會去找尋所對應的 has_one has_many 上相同的名稱,來通知他們之間的關係。
在 has_one has_many 裡的 :inverse_of 會去找尋所對應的 belongs_to 上相同的名稱,來通知他們之間的關係。
如果沒有寫 :inverse_of 這參數,rails 會使用 heuristic algorithm 去猜測名稱,但在如果不是使用標準名稱的話會失效。
Without inverse_of
沒有 :inverse_of 會發生物件不同步的問題,可以看以下的範例:
1 | class Author < ActiveRecord::Base |
Css 網頁符合瀏覽器大小
Ruby on Rails Multiple Foreign Keys
這篇主要是在講說,在一個 Table 裡面有多個 Foreign Keys 會指向同一個 table。例子如下,一首歌 Song 會有歌手 (singer_id) 跟作曲者 (composer_id),都會指向同一個 Singer 的 table。
1 | ┌──────────────────┐ ┌─────────────────────┐ |
Ruby 直接儲存 Tempfile 的方法
先建立一個 Tempfile,然後隨便輸入一些資料進去。
1 | require 'tempfile' |
Tempfile 在程式結束的時候會 f.unlink
刪除檔案,所以在結束之前可以使用 File.rename
移動檔案,讓檔案逃脫免於被刪除的命運。
1 | # File.rename("afile", "afile.bak") |
Ruby on Rails Eager Loading 加速:一次拿取所以資料
這個在 rails 裡面,資料有關聯的時候,會產生的一些效能上的問題,假設我們的例子如下:
1 | ┌──────────────────┐ ┌───────────────────┐ |
當我們在 books controllers 拿了一群東西,像是有 all 或是 where
1 | @books = Book.all |
常常接著又在 view 裡面使用 each 抓取了關聯的東西 author,這時 @books 不知道 author 的內容所以又必須呼叫一次 SQL 指令去拿資料,所以當資料量一大的時候,會產生效能上的問題。
1 | @books.each do |book| |
Ruby on Rails 重新設置 Database
重設 Database 的方法
Status
在重新設置資料庫前先執行 db:migrate:status
,看看現在資料庫的 migrate 的狀態是什麼。
1 | # rake db:migrate:status |
Basic
在重新設置資料庫時,最簡單的方法就是先把資料庫刪除,然後重新建一個,最後在 migrate:
1 | db:drop db:create db:migrate |
Sass 文字置中
Javascript Canvas Load Image with Cross Origin
Canvas Usage
html canvas 簡單來說就是個 image,只是它可以使用 Javascript 來 render 你所想要的樣子,所以能操作的東西十分的多,可以拿來做動畫或是遊戲等等的,有其他的套件輔助會比較方便。
1 | // 建立 canvas |
Load Image From Url
用 Javascript Image 物件來建立圖片。
1 | var img = new Image(); |
Sass 絕對置中 水平置中 垂直置中
絕對置中 absolute center
顧名思義就是水平置中加上垂直置中,讓內層的 div
會在外層的 div
的正中間。
Html
1 | <div class='outer'> |
Scss
1 | .outer { |
任意註解掉 top
left
bottom
right
的參數,可以將內層的 div
對齊在外層的九個位置上,即可解決水平置中與垂直置中的問題。
Sass 圓形階層漸層
Circle Gradient
Sass
參數說明:
- shift: 從中心點移動多少位置,如果是
120px
則會從上一層的div
左上角的原點,往右邊且往下個移120px
。 - step: 多少 pixel 換另一個顏色。
- colors: 每一層的顏色,由內到外排序。
1 | $shift: 120px; |