Module: Basho::ActiveRecord::Base

Defined in:
lib/basho/active_record/base.rb

Overview

ActiveRecordモデルに +basho+ / +basho_postal+ マクロを提供するモジュール。 +include Basho+ で自動的に extend される。

Examples:

class Shop < ApplicationRecord
  include Basho
  basho :city_code
  basho_postal :postal_code, prefecture: :pref_name, city: :city_name
end

Instance Method Summary collapse

Instance Method Details

#basho(column) ⇒ void

This method returns an undefined value.

自治体コードカラムから +city+, +prefecture+, +full_address+ メソッドと +with_basho+ スコープを定義する。

DBモードでは +belongs_to :basho_city+ と +has_one :basho_prefecture+ を追加し、 +with_basho+ スコープでN+1クエリを防止する。 メモリモードでは +with_basho+ はno-op(+all+)となる。

Parameters:

  • column (Symbol, String)

    6桁自治体コードを格納するカラム名



27
28
29
30
31
# File 'lib/basho/active_record/base.rb', line 27

def basho(column)
  column_name = column.to_s
  Basho.db? ? basho_db_mode(column_name) : basho_memory_mode(column_name)
  basho_define_full_address
end

#basho_postal(column, **mappings) ⇒ void

This method returns an undefined value.

郵便番号カラムから +postal_address+ メソッドを定義する。 マッピングオプションを渡すと +before_save+ で住所カラムを自動入力する。

Parameters:

  • column (Symbol, String)

    郵便番号を格納するカラム名

  • mappings (Hash)

    マッピングオプション

Options Hash (**mappings):

  • :prefecture (Symbol)

    都道府県名の保存先カラム

  • :city (Symbol)

    市区町村名の保存先カラム

  • :town (Symbol)

    町域名の保存先カラム

  • :prefecture_code (Symbol)

    都道府県コードの保存先カラム

  • :city_code (Symbol)

    自治体コードの保存先カラム



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/basho/active_record/base.rb', line 44

def basho_postal(column, **mappings)
  column_name = column.to_s

  define_method(:postal_address) do
    code = send(column_name)
    return nil unless code

    postal = Basho::PostalCode.find(code)
    return nil unless postal

    "#{postal.prefecture_name}#{postal.city_name}#{postal.town}"
  end

  PostalAutoResolve.install(self, column_name, mappings) if mappings.any?
end