iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
自我挑戰組

冒險村-30 Day Ruby on Rails Tips Challenge系列 第 28

冒險村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

  # 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

My blog


上一篇
冒險村27 - Concern
下一篇
冒險村29 - API - exchange_rate
系列文
冒險村-30 Day Ruby on Rails Tips Challenge30

尚未有邦友留言

立即登入留言