# RL-?? 綜合補充 /notes/:id 的:是字串不是符號 瀏覽器只有支援 get post 其他都是用 post 來表達、模擬的 new 跟 create 是一組的,通常會搭配使用 robot.txt 規範爬蟲機器人 I18n I與n中間有18個字母 應避免 SQL injection ## Object-Relational Mapping(ORM) 物件關係對映 幫助使用者更簡便、安全的去從資料庫讀取資料,透過程式語言,去操作資料庫語言( SQL )。 將關聯式資料庫檔案對映到物件上。 ## Active Record Active Record 是一個模組,裡面放了大量的類別跟方法給我們用。 只要需要變動到資料庫資料的時候,基本上都是使用 Active Record 來操作。 Model = Active Record 設計出來的產物。 Model 會把從資料表的每筆資料包裝成一個物件讓我們使用。 透過第一篇基礎篇可以知道哪些方法是使用 ORM 技巧,非常實用。 第二篇關聯篇提到很多細節。 [Rails Guide:Active Record 基礎](https://rails.ruby.tw/active_record_basics.html) [Rails Guide:Active Record 關聯](https://guides.rubyonrails.org/active_record_querying.html) ### 前端技術,想走前端的可學 - SPA = Single Page Application - SSR = Server-Side Render(ing) #### Turbolinks 在點超連結時 Rails 其實不會換頁,只是看起來換頁而已。 面試時可問,貴公司有沒有用有沒有Turbolinks? - turbolinks: 在背後偷偷撈資料,有自己的事件,非HTML 的 DOMContentLoaded。 他有加監聽器,用非同步抓別的頁面的資料,把自己這邊的 body 換掉,也會把網址改掉,假裝有換頁,所以換頁時看起來會很順。 Ajax:應用在 google map,點擊滑鼠拖拉,放開後會即時載入地圖資訊。 [Rails Turbolinks™ 5 深度研究](https://www.writershelf.com/article/rails-turbolinks%E2%84%A2-5-%E6%B7%B1%E5%BA%A6%E7%A0%94%E7%A9%B6?locale=zh-TW) ### prettier 在專案內新增 .prettierrc 檔案。 用 {} 包起來,裡面可做個人化。 細節設定可參考這篇,[導入 Prettier](https://ithelp.ithome.com.tw/articles/10205684) ### I18n 讓你的網站國際化,根據不同的使用者直接採用不同的語言、數字格式、日期格式等。 [rails i18n](https://guides.rubyonrails.org/i18n.html) 命名:i跟n之間有18個字,如果名字太長的都可以這樣用, 像全台名字最長的可以叫陳48魚、高1龍、五3石,以此類推。 K8s:用在網站部屬與維護。 ### partial render、render collection - partial render:局部渲染 檔名要記得以 _ 開頭! - render collection:高級黑魔法,大概是 Sectumsempra 撕淌三步殺等級的,之前用的只是去去武器走等級。 要符合很多東西才能用,要看得懂但不一定要用。 可簡寫成 <% = render @notes %> [Layouts and Rendering in Rails](https://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables) ### rails g scaffold 利用鷹架開外掛馬上建好 CRUD 功能。 ## 面試級作業 [五倍紅寶石 github 作業](https://github.com/5xTraining/TrainingPrograms/blob/master/T101.md) 步驟20登入登出功能 hen 重要 ------- 1. 為什麼創造物件都要用 Model 來 new ,如果用Controller 的類別來 new 可以嗎?
 是因為 Model 是負責跟資料庫溝通,讓創造出來的物件能被寫入資料庫才會選擇用 Model 嗎? Q: 可以啊,但要想想, new Controller 要做什麼? 2. 這邊的 link_to 方法內的參數 note.title 可以用 . 來取得資料庫的 title 欄位是 ORM 的用法嗎?
 就跟 @notes = Note.order(id: :desc) 的.order 可以排序、還有 .all 可以抓所有資料一樣

 ```ruby= <% @notes.each do |note| %> 
 <li><%= link_to note.title, note_path(note) %></li>
 <% end%>
 ``` Q: 它就是 rails 的 ORM 沒錯 3. 這邊的 f.label 為什麼用 . 就能取得 label 標籤?
 是Rails 讓 label 變成方法給 f 用嗎?

 ```ruby= <%= form_for(@note) do |f|%> <%= f.label :title, "標題" %> <%= f.text_field :title %> <%= f.label :content, "內文" %> <%= f.text_area :content %> <%= f.submit "送出" %> <% end %> ``` Q: 不是「取得」,是「產生」,只要去看看那個 f 是什麼,再看看那個 f 物件上有什麼方法就會更清楚了 f.label 就只是「呼叫 f 物件上的 label 方法,它的回傳值就是 <label...></label>」 ----- ###### tags: `Rails` ###### tags: `面試題`