Movatterモバイル変換


[0]ホーム

URL:


酒と泪とRubyとRailsと

Rails/Model(Active Record)のConcern


Ruby on RailsでModelの共通処理を切り出すときに使われるConcernの紹介です。

🐝Concernの書き方

  • includeブロックでscope, Callbackなどを定義
  • module ClassMethodsのブロックにクラス・メソッドを定義
  • インスタンスメソッドはモジュール直下
moduleMyConcern
extend ActiveSupport::Concern

# Scope や Callback 処理を実装する
includeddo
scope:without_deleted, lambda{ where(deleted_at:nil) }
end

moduleClassMethods
deffoo
puts'foo'
end
end

defbar
puts'bar'
end
end

🐮Example

ElasticSearch の処理をconcernで分離

moduleArticle::Searchable
extend ActiveSupport::Concern

includeddo
include Elasticsearch::Model

# Customize the index name
index_name"green_application"

# Set up index configuration and mapping
settingsindex: {
number_of_shards:1,
number_of_replicas:0,
analysis: {
analyzer: {
kuromoji_analyzer: {
type:'custom',
tokenizer:'kuromoji_tokenizer',
filter: ['kuromoji_baseform','pos_filter','greek_lowercase_filter','cjk_width'],
},
ngram_analyzer: {
tokenizer:"ngram_tokenizer"
}
}
}
}do
mapping_source: {enabled:true },
_all: {enabled:true,analyzer:"kuromoji_analyzer" }do
indexes:id,type:'integer',index:'not_analyzed'
indexes:title,type:'string',analyzer:'kuromoji_analyzer'
# ...
end
end

defas_indexed_json(options={})
hash =self.as_json(
include: {
job_types: {only: [:job_type_id] },
# ...
}
)
hash['client_name'] = client.name

hash
end
end

moduleClassMethods
defcreate_index!(options={})
client = __elasticsearch__.client
client.indices.deleteindex:"green_application"rescuenilif options[:force]
client.indices.createindex:"green_application",
body: {
settings: settings.to_hash,
mappings: mappings.to_hash
}
end
end
end

🐹参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍

Rails/Modelバリデーションコールバック変更前後の値の確認値の保存・更新アソシエーション削除メソッドSQLの実行日付カラムの設定便利なDB関連設定読込み専用(Read Only)Concern(共通処理)クエリTipsRails/Controllerrenderレシピ集HTTPステータスシンボルIPの取得についてStrong ParametersControllerのTipsRails/ViewHAMLチートシート画像アップロードフォームS3への画像アップロードForm Objectフォームヘルパー検索可能なselectタグenum - selectタグシンプルな検索ボックス別ウィンドウ・フォームRailsいろいろi18nについてRails.cacheメール送信ロギングCapistrano3でデプロイセッション管理環境ごとのYAML設定読込xx分前の時間表記Tipsいろいろ便利ライブラリ簡単Webmock:VCRN+1対策:bullet環境変数の管理: dotenvi18nサポート: i18n-tasksLDAP:net-ldapヘッダ:secureheadersrack-mini-profileractiverecord-precountカバレッジ計測パンくずリスト+MetadataRSpecの記法自動修正アプリランキング取得Unicorn導入手順unicorn-worker-killerRSpecController SpecCapybaraとヘッドレスChromeRequest SpecAPI認証 Spec便利Tipsデザインパターン概要アブストラクトファクトリビルダファクトリメソッドアダプタコンポジットデコレータプロキシコマンドインタプリタイテレータオブザーバストラテジテンプレートメソッドRuby基礎文字列/String配列/Arrayハッシュ/Hash構造体/StructSpawn(コマンド実行)BundlerについてTipsRails 5.1へのアップデートRails 5へのアップデートrbenvバージョンアップpumaをsystemdで動かすURI.encodeとCGI.escapeURLのパラメータを変更処理時間を計測画像JPEG/PNG/GIF判定トラブルシュートNo route matches assets

[8]ページ先頭

©2009-2025 Movatter.jp