# 20221118 Rails Model關聯 ###### tags: `Ruby & Rails` [TOC] ## 會員系統 <政庭> ## 使用user model 來建立關聯性 * resource 單數 user/new 沒有id ==> 前台 / 對應的 controller 路徑是複數 * * 新增 * * 修改 * * 刪除 * resources 複數 users/new/2 有id ==>後台 一般使用者不應該有id ### object life cycle ### 雜湊加密 before_create:只有在create生命週期時它自己獨有 before_update:只有在update生命週期時它自己獨有 ## 撒鹽 (salting) * 增加 密碼複查度,提高安全性 ## resource 路徑不夠 * member --> 路徑會有id * collection --> 路徑不會有id ## 登入跟是否為會員沒有關係 * 另外給一個號碼牌 resource :session ## cookie VS session * server 拿的是session * client 拿的是cookie * 這兩個是一對的,所以確認兩者對的上才算是真正的"登入成功" ## view helper * 把view helper 寫在 /app/helper資料夾裡面 ## 建立關聯性 從 Wishlist ---> User * 在User.rb ==> has_many: wish_lists * 在wishl_ist.rb ==> belongs_to :user * belongs_to 可以單獨存在。 --- <侑庭> ## resources vs resource * 單複數區別 最大就是路徑複數的有id , 單數的沒有id ```ruby! resources :users users/2 >show resource :user users/3 ``` * 慣例單數會對單數,複數會對複數 ## 按慣例做事情 form_with 跟 form_for 會自動去猜路徑有的時候會猜成複數,這時候我們就要去改routes 要在 hash雜湊演算法 ,MD5 ,SHA1 ,SHA256 輸入跟輸出是一樣,說起來就像是為密碼11111打進來之後 經過MD5加密成abcde就會在資料庫中寫入abcde , 只要使用者打一樣密碼進來就會得到一樣的結果 ```ruby! #hash private def encrypt_password self.password =Digest::SHA256.digest(self.password) end ``` ## cookie vs session cookie 像是我們買飲料的號碼牌拿在消費者手上 session 像是店家的號碼牌可以比對買飲料的客人 所以我們以前常常清除瀏覽器的cookie 就是可以取消暫存也就是把號碼牌取消,這樣我們去那家店就要重新再排(也就是重新登入一次) 兩種引入方法, 可以在controller 用 include helper 或是如果在放在controller 裡面那view就不會動了 ,我們就可以用 helper_method:後面接參數就可以給他們用了 會員登入系統 diveser Sorcery ```ruby! # add_colummn :wish_lists , :user_id , :integer # add_index :wish_lists ,:user_id add_belongs_to :wish_lists, :user # add_references :wish_lists, :user ``` def current_user @__usreUser__ ||= User.find_by(id: session[:user]) end has_many :wish_list , 不是建立關聯而是會建立四種方法讓他可以他, 讓他用但是都是抓table裡面的欄位利用他們的id ,belongs_to :user --- <于婷> ## 當要建立前台路徑 ```ruby= resource :user, as: "users" ``` 1. 可使用resource 會缺少id(不會看到別人的), index(不會有所有列表) 2. resource單數 :user也是單數 3. 慣例上會去找users_path但我們是用單數去長,所以要再做給他`as: "users"` ## 為密碼加密 ```ruby= private def encrypt_password self.password =Digest::SHA256.digest(self.password) end ``` ## cookie 與 session 1. server伺服器 拿的是session 2. client瀏覽器(使用者) 拿的是cookie 3. 類似點餐時會有取單號碼牌 ## 快速製作使用者(包含登入登出) 下載套件 diveser 或 Sorcery ## 建立關聯性 WishList <-> User 1. 在User.rb => `has_many: wish_lists` 2. 在WishLst.rb => `belongs_to :user` * 可以單獨存在,有查詢需求才需要添加。 ---