---
# System prepended metadata

title: RL-?? 綜合補充
tags: [面試題, Rails]

---

# 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: `面試題`