並び順

ブックマーク数

期間指定

  • から
  • まで

41 - 80 件 / 120件

新着順 人気順

activerecordの検索結果41 - 80 件 / 120件

  • カラム追加で増えるActiveRecordのメモリサイズ イメージできますか?

    Devin , 正しい付き合い方と使い方 / Living and Working with Devin

      カラム追加で増えるActiveRecordのメモリサイズ イメージできますか?
    • サイト終了のお知らせ

      「iCARE Dev ブログ」は、2025年2月27日をもちまして終了いたしました。 長らくご覧いただきまして、誠にありがとうございました。 今後は iCARE Official Note をご覧いただければ幸いです。

        サイト終了のお知らせ
      • Rails 6.1の新機能「strict_loading」でN+1を検知する

        こんにちは。 GMOアドマーケティングの石丸(@thomi40)です。 昨年の12月にRuby on Rails 6.1の新機能の1つである「annotate_rendered_view_with_filenames」について紹介しました。 この記事は GMOアドマーケティング Advent Calendar 2020 8日目の記事です。はじめにこんにちは。GMOアドマーケティングの石丸(@thomi40)です。弊社では複数のプロダクトでRuby on Railsを使って開発を行っています。今回はRails 6.1で導入が予定されている「annotate_rendered_view_with_filenames」について紹介します。annotate_rendered_view_with_filenamesとは?annotate_rendered_view_with_filenames は

          Rails 6.1の新機能「strict_loading」でN+1を検知する
        • Rails の隠れた堅牢性:SELECTクエリが自動リトライされる仕組み - inSmartBank

          こんにちは、おはようございます、こんばんは、スマートバンクで顧客体験チームのエンジニアリングマネージャーをしている佐藤(@tmnbst)です。 Rails 7.1 以降 では、SELECTクエリが内部的に自動でリトライされる仕組みが導入されています。 このリトライ処理は、allow_retry という内部フラグによって制御されており、Railsが「これは安全(冪等)なクエリだ」と判断した場合に場合にのみ有効になります。 普段Railsを使っているだけではなかなか気づけないこの仕様ですが、ネットワーク切断やDBのフェイルオーバー時などの場面で効果を発揮します。 この記事では、Railsのコードを読みながら allow_retry の仕組みを紐解き、実際にどんな条件でリトライされるのかを検証してみます。 1. allow_retry とは何か 2. 内部処理解説 to_sql_and_bind

            Rails の隠れた堅牢性:SELECTクエリが自動リトライされる仕組み - inSmartBank
          • GitHub - instant-dev/instant: JavaScript API framework with ORM, migrations and vectors

            You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

              GitHub - instant-dev/instant: JavaScript API framework with ORM, migrations and vectors
            • switch_point では ActiveRecord v6.1 以降をサポートしないことにした - eagletmt's blog

              switch_point を4年ぶりにリリースした。このリリースは主に ActiveRecord v6.1 以降をサポートしない意志を表明するためのものである。 github.com switch_point は6年前に仕事で困ったことを解決するために書いた gem である。経緯は https://eagletmt.hateblo.jp/entry/2014/09/22/203819 を参照。この記事にある「Rails の激しい変更についていきやすい設計・実装」は成功したと思っていて、バージョンや respond_to? による分岐を一切せずに ActiveRecord v3.2 から v6.0 までサポートすることに成功している。 しかしまもなくリリースされるであろう ActiveRecord v6.1 では ActiveRecord::ConnectionAdapters::Conne

                switch_point では ActiveRecord v6.1 以降をサポートしないことにした - eagletmt's blog
              • ActiveRecord の接続管理の仕組み

                ActiveRecord がデータベースとの接続をどう管理しているのかを調べたメモ。主に active_record/connection_adapters 以下の話。現時点での main ブランチの HEAD を参照した。 詰まったときに調べる箇所のあたりを付けられるよう全体観を持ちたいという目的だったので、細かい部分まで把握しきれていはおらず、ご了承ください。 ActiveRecord の使い方のおさらい まず最初にユーザーとして、ActiveRecord でデータベースにクエリを発行する際の流れを簡単におさらいする。 まずデータベースの接続情報を database.yml に記載する。ここではメインとなる primay DB と animals DB の 2 つがあり、またそれぞれに primary (master) と replica があるとする (この例は Active Rec

                  ActiveRecord の接続管理の仕組み
                • そろそろ理解する includes / Understanding includes

                  RubyKaigi 2024 直前LT祭の発表スライドです。 https://timeedev.connpass.com/event/315946/ スライド内の includes クイズを手元で動かすためのスクリプト: https://gist.github.com/euglena1215/…

                    そろそろ理解する includes / Understanding includes
                  • Rails: Active Recordのfindで怖い思いをした話(翻訳)|TechRacho by BPS株式会社

                    概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: A scary side of ActiveRecord's find | Arkency Blog 原文公開日: 2019/03/19 原著者: Jakub Kosiński サイト: Arkency Blog 日本語タイトルは内容に即したものにしました。 参考: Rails API find -- ActiveRecord::FinderMethods 参考: Object#tap (Ruby 3.2 リファレンスマニュアル) 私は最近プロジェクトでこんなリファクタリングを行いました。identityに束縛されたコンテキストにドメインイベントをさらに追加することで、システム内のidentityに対して実行された特定のアクションから取得する監査ログを改善するというものです。手始めに、コマンドを消費する責務を持つServiceを

                      Rails: Active Recordのfindで怖い思いをした話(翻訳)|TechRacho by BPS株式会社
                    • Rails: Active Record属性のデフォルト値はコールバックよりもdefaultオプションで設定しよう(翻訳)|TechRacho by BPS株式会社

                      概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Assign a default value to an attribute in Active Record - Andy Croll 原文公開日: 2023/03/13 原著者: Andy Croll 日本語タイトルは内容に即したものにしました。 以下のAPIドキュメントもどうぞ。 Rails: ActiveRecord標準のattributes APIドキュメント(翻訳) Active Recordモデルのインスタンスにデフォルト値を設定する必要が生じたことのある人は、おそらくコールバックでデフォルト値を設定したことがあるでしょう。 実はRails 5.0からもっとよい方法があるのですが、最近まで気づいていませんでした(Mosesに感謝します!) 参考: §2.3 Active Record属性API -- Ruby on

                        Rails: Active Record属性のデフォルト値はコールバックよりもdefaultオプションで設定しよう(翻訳)|TechRacho by BPS株式会社
                      • Active Recordで関連先を保存するときに気をつけること - おもしろwebサービス開発日記

                        先日、仕事でRails(Active Record)の難しい仕様に遭遇したので共有するためにエントリをしたためました。似たようなケースに遭遇した人の手助けになれば幸いです(\( ⁰⊖⁰)/) 対応Railsバージョンと設定 Rails6.1以上 config.active_record.has_many_inversing = true(Rails6.1のデフォルト設定)である 問題1 まず次のコードを読んでみてください。 class User < ApplicationRecord has_many :posts end class Post < ApplicationRecord belongs_to :user, inverse_of: :posts # (1) before_update { puts 'before_update' } end user = User.new po

                          Active Recordで関連先を保存するときに気をつけること - おもしろwebサービス開発日記
                        • Rails 6.1: 孤立化したレコードのリストを取れる'missing'クエリメソッドが追加(翻訳)|TechRacho by BPS株式会社

                          概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Rails 6.1 adds query method missing to find orphan records | Saeloun Blog 原文公開日: 2021/01/21 著者: Prateek Choudhary サイト: Saeloun Blog | Ruby on Rails Consulting Company based in San Francisco and Boston 日本語タイトルは内容に即したものにしました。 以下の関連記事もどうぞ。 週刊Railsウォッチ20190513: 孤立化したレコードを検索するmissingメソッド Rails 6.1: 孤立化したレコードのリストを取れるmissingクエリメソッドが追加(翻訳) Rails 6.1に、ActiveRecord内の孤立化したレコード(o

                            Rails 6.1: 孤立化したレコードのリストを取れる'missing'クエリメソッドが追加(翻訳)|TechRacho by BPS株式会社
                          • 14 tools every Ruby developer will love for performance and debugging"

                            Product Performance, Product Scaling, & Technical Assessments

                              14 tools every Ruby developer will love for performance and debugging"
                            • Rails 7 で追加されたComparisonValidatorで日付のバリデーションを実装する

                              この記事は GMOアドマーケティング Advent Calendar 2022 3日目の記事です。 はじめに こんにちは。 GMOアドマーケティングの石丸(@thomi40)です。 前回の記事では Rails 7 から実装された query_log_tags について紹介しました。 はじめにこんにちは。GMOアドマーケティングの石丸(@thomi40)です。以前、本ブログでRails 6.1に新しく追加された機能について紹介しました。今回はRails 7から追加された「query_log_tags」について紹介します。query_log_tagsとは?query_log_tags は Active Record のオプションの一つで、設定を有効にすることでクエリのログに自動でコメントを追加することができる機能です。元々は「Marginalia」というGemで実装されていた機能とのこと。詳細

                                Rails 7 で追加されたComparisonValidatorで日付のバリデーションを実装する
                              • ActiveRecordの「table alias問題」に悩まされた結果gemを作って解消した話

                                3行で できるだけ「文字列指定」ではなく「キー指定」を使いましょう where句にてテーブル名を指定するのは極力避けましょう activerecord-pretty-comparator gem を使うことで、文字列指定を使わざるを得なかった > もキー指定で書けます はじめに この記事では where('ends_at > ?', Time.current) のような書き方を「文字列指定」、 where(starts_at: ...Time.current) のような書き方を「キー指定」と呼びます 株式会社グロービスのslackにかみぽさんにJOINいただいており、不定期にRailsの困りごとを 壁打ち/相談 させていただいています この記事に出てくるコードは、実際のプロダクトコードをベースにしつつ問題を再現する最小のケースとして書いてみました Kaigi on RailsにCFP出した

                                  ActiveRecordの「table alias問題」に悩まされた結果gemを作って解消した話
                                • Railsのデザインパターン: Formオブジェクト

                                  Formオブジェクトとはまず、この記事におけるFormオブジェクトについて定義します。Formオブジェクトはモデル層に属するクラス群で、コントローラ層からユーザーの入力を受けとり整形・検証し永続化する責務をもちます。またビュー層に表示するためのデータを提供する、という役割もあります。 FormオブジェクトはActiveRecordモデルと1対1の場合もありますが、そうでなくてもかまいません。複数のActiveRecordモデルの場合もあれば、対応するActiveRecordモデルがない場合にも採用できます。 Formオブジェクトの必要性Formオブジェクトはフォームの責務をカプセル化し、コントローラやビューを疎結合に保つために必要なデザインパターンです。 ユーザーの入力の整形や永続化をコントローラだけで行うと、コントローラが肥大化してしまいます。この原因はコントローラがモデル層の知識をもち

                                    Railsのデザインパターン: Formオブジェクト
                                  • preload、eager_load、includesの挙動を理解して使い分ける - stmn tech blog

                                    目次 はじめに 使用する関連付け preload、eager_load、includesの挙動 includesはどのような場合にpreloadとeager_loadの挙動となるのか preload、eager_loadの使い分け さいごに はじめに こんにちは、株式会社スタメンでエンジニアをしているワカゾノです! 4月からサーバーサイドエンジニアとして、弊社プロダクトTUNAGの開発を行っております。 先日、弊社CTOの松谷とペアプロを行いました。 パフォーマンス改善のタスクを行いましたが、タスクを通してN + 1問題に複数回直面しました。 Active Recordにおいて、N + 1問題を解消する方法として、関連テーブルのデータを事前に読み込んでおき、キャシュしておくという方法を取ると思いますが、Railsではその方法としてpreload、eager_load、includesメソッ

                                      preload、eager_load、includesの挙動を理解して使い分ける - stmn tech blog
                                    • Rails APIドキュメント: Active Recordのトランザクション(翻訳)|TechRacho by BPS株式会社

                                      概要 MITライセンスに基づいて翻訳・公開いたします。 英語ドキュメント: ActiveRecord::Transactions::ClassMethods(18707ab) ライセンス: MIT 2020/11/30: 初版公開(77f7b2d) 2022/12/07: 更新 トランザクションとは、それが1件のアトミックな操作としてすべて成功した場合に限りSQLステートメントが永続化する、保護的なブロックです。古典的な例としては「出金が成功した場合にのみ入金ができる(またはその逆の)2つの口座間での振替」があります。トランザクションはデータベースの一貫性を強制し、プログラムのエラーやデータベースの破損からデータを保護します。つまり、「すべて一括実行される」か「一切実行されない」かのどちらかでなければならないステートメントが複数ある場合は、基本的にトランザクションブロックを使うべきです。

                                        Rails APIドキュメント: Active Recordのトランザクション(翻訳)|TechRacho by BPS株式会社
                                      • 『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか

                                        2024/04/24(Wed)に行われたGotanda.rb#58の登壇資料です。 https://gotanda-rb.connpass.com/event/315058/ 『Railsオワコン』と言われる時代に、なぜブルーモ証券はテックスタックの1つとしてRailsを選んだのかの解説資料です。

                                          『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
                                        • Railsの技: 関連先レコードがないデータをwhere.missingで検索する(翻訳)|TechRacho by BPS株式会社

                                          概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Find records missing an association with where.missing | Boring Rails: Skip the bullshit and ship fast 原文公開日: 2021/03/14 著者: Matt Swanson サイト: Boring Rails #missingはRails 6.1で追加された機能です。 参考: 週刊Railsウォッチ(20190513) 否定は一般には立証できませんが(訳注: 消極的事実の証明)、データベースに否定のクエリを投げることについてはどうでしょうか。クエリはデータを検索するために書くのが普通ですが、逆にデータが「存在しない」ことを検出するためにクエリを書くこともあります。 生SQLで言うなら、LEFT OUTER JOINとNULLチェッ

                                            Railsの技: 関連先レコードがないデータをwhere.missingで検索する(翻訳)|TechRacho by BPS株式会社
                                          • Ruby on Rails: BulletからRails標準のstrict loadingに乗り換えるMEMO📝 - Madogiwa Blog

                                            今までN+1の検知にBulletを使っていたのですが🔫 github.com Rails 6.1から導入された新機能strict loadingでも同じようなことが実現できそうだったので、個人のWebサービスをBulletからstrict loadingに載せ替える手順をメモしておきます📝 strict_loadingをグローバルに導入する strict loadingを無効化する ActiveRecordのインスタンスにstrict_loadingを無効化するメソッドを追加 FactoryBotで作成したインスタンスはstrict_loadingを無効化する console時にstrict loadingを無効化する おわりに 追記:2021/04/05 参考 strict loadingの概要は以前まとめているので、興味がある人はこちらからどうぞ madogiwa0124.hate

                                              Ruby on Rails: BulletからRails標準のstrict loadingに乗り換えるMEMO📝 - Madogiwa Blog
                                            • has_manyにブロック引数を渡してリレーションを拡張する|TechRacho by BPS株式会社

                                              今日はhas_manyのブロック引数に関して取り上げます。 以下のモデルを想定します。 # attributes # # name: 氏名 # attendance_count: 出席回数 class Student < ApplicationRecord has_many :exams end # attributes # # student_id: 学生ID # subject: 教科 # period: テスト実施回 # score: 得点 class Exam < ApplicationRecord belongs_to :student end スコープブロック has_many のブロックと聞くとまずスコープブロックが思いつくと思います。 今回のテーマのブロック引数とは異なりますが、先にスコープブロックに関して触れていきます。 スコープブロックは has_many の第2引数に

                                                has_manyにブロック引数を渡してリレーションを拡張する|TechRacho by BPS株式会社
                                              • Rails(ActiveRecord)で自在にSQLを書く手段いろいろ

                                                こんにちはー。 Railsである程度の規模の開発をしていると、ちょっと込み入った形のSQLでデータを取得したい状況が発生してきます。 今回は、そんなときに役立つActiveRecordクエリのテクニックをご紹介します。 ちなみにexecute()、arelは使いません。 (環境: Ruby 2.5.3, Rails 6.1.3) selectをゴリゴリ書く ActiveRecordのselectというメソッドがあります。 基本的な使い方としては、こんな感じで、必要なカラムだけ取得するためのものです。 users = User.all.select(:id, :name) users.first.attributes # => {"id"=>1, "name"=>"Alice"} なんですが、SELECT句を文字列で好きに書くこともできます。別名を付けておくことで、その名前で値を取得できます

                                                  Rails(ActiveRecord)で自在にSQLを書く手段いろいろ
                                                • 「Rails 6.1で新しく入る機能について」iCARE Dev Meetup #12 の登壇内容 https://icare.connpass.com/event/183716/

                                                  rails_6_1_new_features.md Rails 6.1で新しく入る機能について @willnet 最近のRailsリリース日 6.0.0 (2019/08/06) 5.2.0 (2018/04/09) 5.1.0 (2017/04/27) 5.0.0 (2016/06/30) だいたい1年くらいでマイナー、メジャーバージョンが上がる RailsConf(毎年だいたい4末くらいに開催)がターゲットになっていそう ではそろそろ6.1.0でるの?というとまだっぽい雰囲気を感じる https://github.com/rails/rails/pulls?q=is%3Aopen+is%3Apr+milestone%3A6.1.0 一応6.1.beta1用のブログエントリの準備用PRはある(けどいまアクティブではない) Add post about 6.1.beta1 release

                                                    「Rails 6.1で新しく入る機能について」iCARE Dev Meetup #12 の登壇内容 https://icare.connpass.com/event/183716/
                                                  • Why and how GitHub encrypts sensitive database columns using ActiveRecord::Encryption

                                                    AI & MLLearn about artificial intelligence and machine learning across the GitHub ecosystem and the wider industry. Generative AILearn how to build with generative AI. GitHub CopilotChange how you work with GitHub Copilot. LLMsEverything developers need to know about LLMs. Machine learningMachine learning tips, tricks, and best practices. How AI code generation worksExplore the capabilities and be

                                                      Why and how GitHub encrypts sensitive database columns using ActiveRecord::Encryption
                                                    • Railsの生SQL概要:execute, select_all, find_by_sqlの使い方を覚える - Qiita

                                                      Railsで使用する生SQL Railsにおいて、ActiveRecordのwhere等では表現できない複雑なクエリを使用してDBのデータを取得する場合、生でSQLを書く必要が出てくると思います。 しかし、AcitiveRecordで生sqlを実行するメソッドは数多くあり、用途によってどれを使用すべきか分からないという方もいるのではないでしょうか。 そこで今回はよく使用されるであろう、execute/select_all/find_by_sqlについて、どのように呼び出すのか、戻り値はなにか、どのような用途で使用すべきかについて説明します。 先に結論を書いておくと execute -> クエリの実行 select_all -> セレクト文の結果取得 find_by_sql -> ActiveRecordオブジェクトの取得 となります。詳しくは以下ご覧ください 環境 Rails 5.2.3

                                                        Railsの生SQL概要:execute, select_all, find_by_sqlの使い方を覚える - Qiita
                                                      • ツイッターで見つけて直したActiveRecordの問題さらに3つ - かみぽわーる

                                                        ツイッターで見つけて直したActiveRecordの問題3つ - かみぽわーるの続き。 where(id: ..1) ("id" <= 1)をnotしたら"id" > 1になってほしい 今のmasterで試してみたのですが、SELECT "users".* FROM "users" WHERE NOT ("users"."id" <= 1) になるようです。 https://t.co/pQh4h9g0MP— 神速 (@sinsoku_listy) August 3, 2019 github.com association先のカラムをpluckしたときもちゃんとtype castされてほしい 対応ありがとうございます! 制限があるとはいえ、定義ではなく呼び出し側で解決を図れるのは嬉しいです。 ちなみに association の情報を与えてあげるようなアプローチは既に検討済みですか?例えばこ

                                                          ツイッターで見つけて直したActiveRecordの問題さらに3つ - かみぽわーる
                                                        • Railsでポリモーフィック関連を使った話(理由、必要な作業、注意点) - ESM アジャイル事業部 開発者ブログ

                                                          こんにちは、アジャイル事業部 9sako6 です。 私のいるプロジェクトで大きなエンハンスが行われ、その中で Polymorphic Association(ポリモーフィック関連) を使う場面がありました。 ポリモーフィック関連を選択した理由や行った作業、注意点について話します。 架空のサービスを例に説明を行います。 サービス概要 私たちが運営するサービスでは、Magician(魔法使い)と、その魔法使いが扱える Magic(魔法)を調べることができます。 この世界の Magic(魔法)に同一のものはなく、 ユニークです。Magic(魔法)はMagician(魔法使い)に属しています。 class Magic < ApplicationRecord belongs_to :magician end class Magician < ApplicationRecord has_many :m

                                                            Railsでポリモーフィック関連を使った話(理由、必要な作業、注意点) - ESM アジャイル事業部 開発者ブログ
                                                          • ActiveRecordモデルのカラムを消すときにignored_columnsが必要な理由 - Progate Tech Blog

                                                            自己紹介 株式会社Progateサーバーサイドエンジニアのもりたんざにあです。 好きなものは卓球と筋トレです。 業務でignored_columnsの必要性や、内部で何をしているかについて調べたので、その過程でわかったことを紹介しようと思います。 前提条件 この記事の内容は https://github.com/rails/rails/tree/5-2-stable のソースコードを前提としています。 ignored_columnsとは 公式ドキュメンテーション : https://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-ignored_columns 「このカラムがデータベースのテーブルにあっても、無視してね!」とRailsのモデルに伝えるために、ActiveRecor

                                                              ActiveRecordモデルのカラムを消すときにignored_columnsが必要な理由 - Progate Tech Blog
                                                            • Pitfalls of Rails db transactions

                                                              Rollback Rails transaction and rescue error to display it good: This is fine record = MyModel.last error_for_user = nil begin ActiveRecord::Base.transaction do # ... record.save! end rescue ActiveRecord::RecordInvalid => e # do something with exception here error_for_user = "Sorry your transaction failed. Reason: #{e}" end puts error_for_user || "Success" source, source2, source3 This is ok as wel

                                                              • 複雑なクエリーをActive Recordのモデルとして定義する方法|TechRacho by BPS株式会社

                                                                WITH句 SQLではWITH句を用いて任意のサブクエリーに対して名前をつけることができます。 SELECT * FROM (複雑なサブクエリー) を WITH any_name AS (複雑なサブクエリー) SELECT * FROM any_name のように記述でき、可読性の向上かが期待でき、再利用も可能となります。 WITH句では、(複雑なサブクエリー)の部分を CTE (Common Table Expression) と呼びます 今回は users 仮想テーブルでは以下のSQLの実行を目標とします WITH "users" AS ( SELECT "accounts"."id", "accounts"."email", "profiles"."first_name", "profiles"."last_name" FROM "accounts" INNER JOIN "prof

                                                                  複雑なクエリーをActive Recordのモデルとして定義する方法|TechRacho by BPS株式会社
                                                                • Rails: ActiveRecord::DelegatedType APIドキュメント(翻訳)|TechRacho by BPS株式会社

                                                                  概要 MITライセンスに基づいて翻訳・公開いたします。 APIドキュメント: ActiveRecord::DelegatedType リポジトリ: rails/delegated_type.rb at main · rails/rails 原文更新日: 2021/11/03(57fe7df) ライセンス: MIT ActiveRecord::DelegatedTypeはRails 6.1以降で利用できます。delegated typeは英ママとしました。 週刊Railsウォッチ20200601 新機能: Active Recordにdelegated_typeが追加もどうぞ。 また、Rails 7ではaccepts_nested_attributes_forもサポートされています。 週刊Railsウォッチ20211115前編 delegated_typeでaccepts_nested_at

                                                                    Rails: ActiveRecord::DelegatedType APIドキュメント(翻訳)|TechRacho by BPS株式会社
                                                                  • トランザクション中にrescueするとロールバックしないので注意! - Qiita

                                                                    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

                                                                      トランザクション中にrescueするとロールバックしないので注意! - Qiita
                                                                    • 監査ログをファイルに記録するためのGemを公開しました - 食べチョク開発者ブログ

                                                                      こんにちは。 食べチョクの開発を副業でお手伝いしているプログラマーの花村です。 監査ログをJSONL(JSON Lines)のファイルに記録するためのGemのAuditLoggableを作成してrubygems.orgで公開しました。 ソースコードもGitHubで公開しています。 ​ rubygems.org github.com なぜ開発したのか 食べチョクでは監査ログを記録するためにAuditedを利用していました。 AuditedはActiveRecordのコールバックを利用してモデルの変更を手軽にRDBに記録してくれる大変便利なGemです。 しかしRDBに記録するためテーブルサイズが肥大化しパフォーマンスに影響を与える場合があるというデメリットもあります。 食べチョクでは注文数の増加に伴ってこの問題に直面しました。 これを解決するにあたり以下のようなアプローチが思いつきます。 監査

                                                                        監査ログをファイルに記録するためのGemを公開しました - 食べチョク開発者ブログ
                                                                      • Railsの複数DB機能で負荷を分散する - 弥生開発者ブログ

                                                                        こんにちは。弥生で Misoca を開発している小坂と申します。インターネットには kosappi という名前で存在しています。 前回ご紹介した みんなのコンピュータサイエンス は読んでいただけたでしょうか? 9月末で事業年度が終わる会社は多いかと思います。みなさんは無事に10月を迎えることはできましたか?私は有給休暇の日数が付与されて、とても良い気分です 🏝 今回は、Rails の複数 DB 機能を利用して9月末の高負荷を乗り切った話を紹介いたします。 🔥 月末の高負荷 Misoca は請求書作成ソフトということもあり、月末にアクセスが増加します。 ユーザの増加や、機能が充実したことにより、DB への負荷も増加しています。8月末の負荷は DB の限界に近い値でした。 特に、文書の一覧や検索などの参照系のクエリの比重が高く、機能の充実によってクエリ自体も重いものになっており、問題になっ

                                                                        • Introducing FastPage: Faster offset pagination for Rails apps — PlanetScale

                                                                          Want to learn more about unlimited IOPS w/ Metal, Vitess, horizontal sharding, or Enterprise options? Talk to Solutions By Mike Coutermarsh | August 16, 2022 We’d like to introduce FastPage, a new gem for ActiveRecord that applies the MySQL “deferred join” optimization to your offset/limit queries. Here is a slow pagination query in Rails: Post.all.order(created_at: :desc).limit(25).offset(100) #

                                                                            Introducing FastPage: Faster offset pagination for Rails apps — PlanetScale
                                                                          • 【Rails】accepts_nested_attributes_forを使用しない方が良い理由とその代替方法

                                                                            「Rails 子モデル 保存」 とかでググるとたくさんのaccepts_nested_attributes_forを使用した記事をお見かけすると思います。 そんなaccepts_nested_attributes_forですが、いま自分が働いている会社では使用することを禁じられており、なるべくクリーンな実装を心がけるということを日々意識しております。 そんなこともあり、改めて使用してはいけないものの正体を調べてみました。 accepts_nested_attributes_forとは何か 一言でいえば、「親モデルに紐づくレコードの保存を簡単にできるようにするためのもの」 です。 具体例で見てみましょう。 下記に2つモデルがあり、親モデルであるAuthorの作成と同時にそれに紐づくBookモデルのレコードも作成するというイメージです。 Author(著者) Book(本) # 著者モデル c

                                                                              【Rails】accepts_nested_attributes_forを使用しない方が良い理由とその代替方法
                                                                            • RailsとClean Architectureに関する考察 - Qiita

                                                                              Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Railsのアプリケーションの設計について考える機会があったのでその過程で考えたこととをまとめておきます。 (2022/03/22) 追記 この記事の発展版、Layered Architectureの勘所という記事を書きました。 Railsをやってた頃はActiveRecordの便利さについ流されてしまいましたが、今やるなら ActiveRecordのモデルとEntityの分離する Entityはimmutableにする というあたりをもっと徹底するのが良いと思います。 背景 Railsをメインで使用している企業で新規のWebアプリケー

                                                                                RailsとClean Architectureに関する考察 - Qiita
                                                                              • シン・ActiveRecordで日付・時刻の範囲検索をシンプルに書く方法|TechRacho by BPS株式会社

                                                                                こんにちはgengenです。 初めに言ってしまうと、Ruby2.7の始端無しRange(beginless range)がActiveRecordのwhereに渡せるので日付検索が全部Rangeできて便利というだけの記事です。 ActiveRecordのwhereにはRangeが渡せる 「ActiveRecordで日付・時刻の範囲検索をシンプルに書く方法」で詳しく紹介されてますが、そもそもwhereのハッシュ引数の値にRangeオブジェクトが渡せて、BETWEENと不等号を使い分けて上手いことクエリを作ってくれます。 User.where(activated_on: Date.new(2022,1,1)..Date.new(2022,12,31)).to_sql => "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"activate

                                                                                  シン・ActiveRecordで日付・時刻の範囲検索をシンプルに書く方法|TechRacho by BPS株式会社
                                                                                • Rails 7のenumに新しい構文が導入(翻訳)|TechRacho by BPS株式会社

                                                                                  概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Rails introduces new syntax for enum | Saeloun Blog 原文公開日: 2021-02-26 著者: Deepak Mahakale サイト: Saeloun Blog | Ruby on Rails Consulting Company based in San Francisco and Boston Rails 7の最新の変更で、enum定義に新しい構文が導入されました(#41328)。 変更前 従来の構文では、以下のように「enumの名前」「enumの値」「enumのオプション」を渡せます。 class Post < ActiveRecord::Base enum status: [ :draft, :published, :archived ], _prefix: true,

                                                                                    Rails 7のenumに新しい構文が導入(翻訳)|TechRacho by BPS株式会社