多型關連(Polymorphic Associations) 可以讓一個 Model 不一定關連到某一個特定的 Model。建立 model 時在最後面加一個字串的 _type 欄位說明是哪一種Model。
例如有 Article、Photo、Comment 三個 model
可以透過多型關連讓 Comment model belongs_to 到另外兩個 Model上,我們希望這兩個 Model 都可以被留言。
建立資料庫
rails g model comment content:text
»
Nested form 可以將有關聯的 model attribute 放在同一個 form 裡面一起建立或更新。
例如一個商品有很多種規格,我希望在新增商品的時候就可以同時新增完規格( product has_many specs )
Model如下:
class Product < ActiveRecord::Base
has_many :specs, :dependent => :destroy
accepts_nested_attributes_for :specs
class
»
cocoon Github page
有時候我們會需要動態新增表單欄位,比如說我希望可以同時新增很多 simple_field_for :specs 的表單,讓使用者可以新增或是刪除表格。
cocoon 提供了兩種 helper:
link_to_add_association 及 link_to_remove_association
實作原理是用 javascript 動態生成表單。在安裝好 gem 之後,必須在 app/assets/javascripts/application.js
»
Turbolink 的作用是讓每一個超連結都只用 Ajax 的方式將整個 body 內容替換掉,這樣換頁時就不需要重新載入 head 部份的標籤,包括 JavaScript 和 CSS 等,目的是可以改善換頁時的速度。
Turbolink 原理
Turbolinks 把頁面上所有 a 標籤添加了一個 click 處理函式。如果瀏覽器支援 PushState,Turbolinks 會對頁面發出 Ajax 請求,解析伺服器回過來的響應,把頁面整個 body 用響應回傳的 body 換掉。接著 Turbolinks
»
Assets 指的是 JavaScript、Stylesheets 和 image 這些靜態檔案。在 Rails 目錄中,只有 Public 是公開讀取的,通常靜態檔案都放在這個目錄下,以讓瀏覽器直接讀取。
而 Rails 的 Assets pipeline 框架可以突破 Public 目錄限制,將靜態檔案依需求放在不同目錄底下,Rails 會幫你組合並壓縮。
用 pipeline 的好處
將所有的 js 或 css 壓縮打包成單一檔案,減少 http request 的大小與數量,增加
»
searchkick Github
首先先在 gemfile 內加入 gem searchkick
執行
bundle install
接著安裝java (若原先就已安裝,此步驟跳過)
安裝完 java 後,在終端機內輸入
複製這行
貼上 command line 然後 enter 就安裝完成
接下來在需要被搜尋的 model 內,加入 searchkick (這裡以 app/model/movie.rb 為例)
在終端機加入搜尋索引
在 config/routes
»