---
# System prepended metadata

title: 20220808 Rails 無名小站實作 (Rich) 文章上鎖
tags: [Rails, Ruby]

---

# 20220808 Rails 無名小站實作 (Rich) 文章上鎖
###### tags: `Ruby` `Rails`

## scope

> controller 內的 where 都可以移到 model 的 scope
> * <mark>Fat Model, Thin Controller</mark>

```ruby
 scope :available, -> { where(deleted_at: nil) } 
  # lambda, Callback function
```

```ruby
    # 如果有比較多邏輯運算寫這種
    # 可以把所有商業運作邏輯放在model這裡
    # ex 之後想找出所有同類型可以在這邊運作
  def self.available 
    where(deleted_at: nil)
  end
```

```ruby=
# before

def destroy
  # @article.destroy
  @article.update(deleted_at: Time.current)
end

# 移至model

# after
# 
# app/modles/article.rb
def destroy
  @article.update(deleted_at: Time.current)
end

# app/controllers/articles_controller.rb
def destroy
  @article.destroy
end

```

## 套件 paranoia 
前面步驟的完整軟刪除套件
[GitHub](https://github.com/rubysherpas/paranoia)





### QueryString (很重要!!)
網址?後面的字串，可被解析為params中的參數
ex: https://www.tenlong.com.tw/zh_tw/recent_bestselling?page=2&range=7

page=2&range=7 就會被抓出來

甚至連從哪邊進入都可以抓出來 (GA分析可以用) 

搜尋bar input的值也會被抓出來
* 可用collection 做search路徑，再抓querystring (參考google)

## 文章上鎖 解鎖

### 新增路徑

### 文章模組新增密碼欄位

### View 新增密碼欄位

### Controller permit 更新

### session 儲存解鎖過的文章

### View 判斷可不可以閱覽

### >> 移至 View_helpeer


## 留言 Comment

### shallow

```ruby=
resources :comments, only: [:show, :edit, :update, :destroy]
resources :articles do
  resources :comments, only: [:index, :new, :create]
end

# = 

resources :articles do
  resources :comments, shallow: true
end
```

