上篇 最後有看到在 Concern 內又 include ValidateParams
,覺得是不錯的整理方式,所以抽出來另外寫一篇,簡單來說其實也是放在 concern folder 內,並另外的取個適合在做什麼的名字而已。並沒有說這是制式的規範,比較像個概念,不管是要額外處理其他的項目,都可以用相同概念變化,同樣放在 Concern 內。
app > controller > concerns > validate_params.rb
# 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
另外,也有可能是在搜尋功能時,可能全形、半形導致後端搜尋無法出現對應的東西出來,其實也可以寫個類似的東西來做轉換,舉例來說:
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 近來就可以使用了
class UsersController < ApplicationController
include HalfwidthFullwidthConverter
def search
convert_character_to_halfwidth(params[:term])
#...
end
end