冒險村28 - Validate Params

28 - Validate Params

上篇 最後有看到在 Concern 內又 include ValidateParams,覺得是不錯的整理方式,所以抽出來另外寫一篇,簡單來說其實也是放在 concern folder 內,並另外的取個適合在做什麼的名字而已。並沒有說這是制式的規範,比較像個概念,不管是要額外處理其他的項目,都可以用相同概念變化,同樣放在 Concern 內。

Create concerns folder

  • validate_params.rb

Add app > controller > concerns > validate_params.rb

1
2
3
4
5
6
7
8
9
# frozen_string_literal: true
module ValidateParams
extend ActiveSupport::Concern

def render_404_if_user_id_invalid(user_id)
raise ActiveRecord::RecordNotFound if params[:user_id] || User.find(user_id)
end
# ...
end

另外,也有可能是在搜尋功能時,可能全形、半形導致後端搜尋無法出現對應的東西出來,其實也可以寫個類似的東西來做轉換,舉例來說:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
module HalfwidthFullwidthConverter
extend ActiveSupport::Concern

def convert_number_to_halfwidth(term)
return fullwidth_number_to_halfwidth(term) if term.match(/^[0-9]+$/)
term
end

def convert_character_to_halfwidth(term)
return fullwidth_character_to_halfwidth(term) if term.match(/^[a-zA-Z]+$/)
term
end

private

def fullwidth_number_to_halfwidth(term)
term.tr('0-9', '0-9')
end

def fullwidth_character_to_halfwidth(term)
term.tr("a-z", "a-z").tr("A-Z", "A-Z")
end
end

將下來,要需要的地方 include 近來就可以使用了

1
2
3
4
5
6
7
8
class UsersController < ApplicationController
include HalfwidthFullwidthConverter

def search
convert_character_to_halfwidth(params[:term])
#...
end
end