並び順

ブックマーク数

期間指定

  • から
  • まで

41 - 80 件 / 135件

新着順 人気順

Activerecordの検索結果41 - 80 件 / 135件

  • kamipoさんのアドバイスと拠点を跨いだ勉強会 - RailsとRubyとVimのブログ

    この記事は京都開発拠点アドベントカレンダー 18日目の記事です。 マネーフォワードには開発拠点が複数ありますが、技術情報はSlackで議論・共有されています。 今日はそんなSlackの中から、東京拠点と京都拠点を跨いで開催した「Railsへコントリビュートする勉強会」について、東京拠点のアルパカ隊長が紹介します。 はじまりのSlack ふとした時に、社内SlackのRubyチャンネルでこんな会話がありました。 @alpaca-tc 程よい難易度で、kamipoさんが「これ自分がやらんでもええやろ」みたいなissueがあれば このslackに投げてもらって 誰かシニアエンジニアがサポートしつつ、新卒がRailsコントリビュートするみたいなのやりたい:eyes: すると、kamipoさんからすぐ解決できるものは見た瞬間に直してしまっていると前置きがあった上で、 こんなissueを教えてもらいま

      kamipoさんのアドバイスと拠点を跨いだ勉強会 - RailsとRubyとVimのブログ
    • RubyでDSLが書きやすい理由を整理する - Qiita

      これは何 Rubyは「DSLが書きやすい言語」という説明がされることがあります。 なぜRubyはDSLが書きやすい、と言われるのかを僕なりにまとめてみました。 「こういう要素もあるからだよ」などあればぜひコメントや編集リクエストをいただけると嬉しいです。 DSLの例 DSLとは直訳するとドメイン固有言語です。 簡単なイメージで言うと、「ユーザーが自由に構文に近い仕組みを実装、提供できる」ようなものです。 詳しい説明はWikipediaにお任せします。 RubyやRailsで使われているDSLで有名なものはActiveRecord周りの実装などでしょうか。 例を記載します。

        RubyでDSLが書きやすい理由を整理する - Qiita
      • create_or_find_byでcreateもfind_byも失敗させる - かみぽわーる

        Active Recordの話です。 create_or_find_byの実装はcreateしてみてユニーク制約に引っかかったらfind_byしてみるなので、ふつうに考えるとfind_byは成功しそうに見えます。 def create_or_find_by(attributes, &block) transaction(requires_new: true) { create(attributes, &block) } rescue ActiveRecord::RecordNotUnique find_by!(attributes) end ですが、以下のスクリプトを実行するとcreate_or_find_byはcreateがRecordNotUnique例外を吐いたあと、find_byもRecordNotFound例外を吐いてレコードを見つけられずに死にます。 ちょっと今から会食なので原

          create_or_find_byでcreateもfind_byも失敗させる - かみぽわーる
        • SQLパフォーマンスチューニングの始め方 | 働くひとと組織の健康を創る iCARE

          こんにちは、iCAREサーバーサイドエンジニアの寺井(@krpk1900_dev)です。 私は今まで新規機能の開発を担当することがほとんどで、既存機能のパフォーマンス改善に取り組むときに何から手を着けて良いか分からなかったため、今回はSQLパフォーマンスチューニングについて調べた内容を記事にしたいと思います。 全体の流れ ざっくり調べてみた内容をフローチャートで整理してみました。 このフローチャートには含めませんでしたが、根本的な解決策としてそもそものロジックやデータ構造を見直すという方法もあります。 1. レスポンスに時間がかかっている箇所とその原因を特定する まずはDatadogのAPMなどでレスポンスに時間がかかっているリクエストを特定します。 APM(Application Performance Monitoring)とは、アプリケーションの性能を管理したり監視するための機能です

            SQLパフォーマンスチューニングの始め方 | 働くひとと組織の健康を創る iCARE
          • 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を検知する
            • GitHub - instant-dev/instant: JavaScript API framework with ORM, migrations and vectors

              instant.dev provides a fast, reliable and battle-tested ORM and migration management system for Postgres 13+ built in JavaScript. For those familiar with Ruby on Rails, instant.dev adds functionality similar to ActiveRecord to the Node.js, Deno and Bun ecosystems. We have been using it since 2016 in production at Autocode where it has managed over 1 billion records in a 4TB AWS Aurora Postgres ins

                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 の接続管理の仕組み
                  • 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: Bulletで検出されないN+1クエリを解消する|TechRacho by BPS株式会社

                      はじめに 普段、Railsを使って開発されている方であれば、関連するテーブルのデータを扱うときなど、N+1クエリを発行していないか、気をつけているかと思います。 また、うっかりN+1クエリを発行してしまうことを防ぐため、N+1クエリを自動で検出するBulletというgemを導入しているかたも多いかと思います。ただ、Bulletで検出されないクエリでもN+1になっているケースがあります。 この記事ではBulletでは検出されないが、N+1になっているクエリを改善する方法を紹介します。 N+1問題とは N+1問題とは、1回のクエリで済むところをデータ量(N)の回数、クエリを発行してしまう問題のことです。 例えば以下のようなクエリはN+1クエリです。 Post Load (0.3ms) SELECT "posts".* FROM "posts" ↳ app/views/posts/index.h

                        Rails: Bulletで検出されないN+1クエリを解消する|TechRacho by BPS株式会社
                      • ActiverecordMultiTenant でマルチテナンシー|yks0406

                        Geppoでバックエンドエンジニアをしている@yks0406です。日本酒で膨らんだお腹を凹ませるために、片道8キロの道のりを毎朝毎晩自転車で通勤しています。これまではRailsを中心にバック/フロントどちらも対応するスタイルで開発してきましたが、1年前Geppoにジョインしてからはバックエンドをメインに開発しています。 今回はGeppoに activerecord-multi-tenant を導入した際の話です。 導入の検討を開始したのが2018年1月あたりで、実際に導入が完了したのは2019年10月です。方針決定までに1年4ヶ月、開発に6ヶ月かかりました。途中空白の期間が発生してはいるものの、なかなかの作業ボリュームでした。 ※この記事はHR Tech Advent Calendar 2019の最終日の記事です マルチテナンシーって何? 1つのサービスで複数クライアント(つまりテナント)

                          ActiverecordMultiTenant でマルチテナンシー|yks0406
                        • ActiveRecordのincludesは使わずにpreloadとeager_loadを使い分ける理由 - Qiita

                          はじめに ActiveRecordでN+1問題やスロークエリを解消するためにeager loadingを行う場合、普段Railsを使って開発されている方であれば、パッと思いつくのはincludesではないでしょうか?もしくは、preloadやeager_loadを使用しますよね。 この記事では、Webサイト表示パフォーマンスを保つため、ActiveRecordのメソッドの違いや、どいういう場合に使ったら良いのか、どいういう場合には使わない方が良いのかについて書きました。 実際に Railsアプリケーションを作成して解説していきます。 用語の説明と分類「ORM の Eager loading と Lazy loading」 Webサイト表示パフォーマンスを保つため、ORM(RailsではActiveRecord)では、Eager loading と Lazy laodingというものをサポー

                            ActiveRecordのincludesは使わずにpreloadとeager_loadを使い分ける理由 - Qiita
                          • そろそろ理解する includes / Understanding includes

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

                              そろそろ理解する includes / Understanding includes
                            • 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サービス開発日記
                                • 14 tools every Ruby developer will love for performance and debugging"

                                  Discover 14 essential tools and gems for Ruby developers. Enhance your Ruby programming with top picks for feedback loops, performance, debugging, and data management.

                                    14 tools every Ruby developer will love for performance and debugging"
                                  • ActiveRecordのincludesに複数の関連テーブルを指定したらスロークエリになった件 - LiBz Tech Blog

                                    バックエンドエンジニアの宮澤です。 Railsアプリを開発していると関連テーブルを取得するactiverecordのincludes, eager_load, preloadメソッドはよく使いますよね。 アプリケーションのある箇所でスロークエリが出ているのを見つかって対応した際に、テーブル関連付けの種類によるこれらのメソッドの挙動について調べてみました。 テーブル設計 ER図 サンプルとしてシンプルに地域 => 国 => 都市と1:Nの関係でテーブルを作成します マイグレーション class CreateRegions < ActiveRecord::Migration[6.0] def change create_table :regions do |t| t.string :name t.timestamps end end end class CreateCountries < Ac

                                      ActiveRecordのincludesに複数の関連テーブルを指定したらスロークエリになった件 - LiBz Tech Blog
                                    • STI、Polymorphic関連を実際に使用した話 - エニグモ開発者ブログ

                                      こんにちは!サーバーサイドエンジニアの@hokita222です! 有酸素運動は脳を活性化させると聞いて、最近は朝会社に出社せずにランニングしております! それはさておき、これは Enigmo Advent Calendar 2019 23日目の記事です! 今回は弊社が運営するサイトのBUYMA (Ruby on Rails)に追加した機能で、STI、ポリモーフィック関連を使ってみたので、どういう設計にしたかを書いていこうと思います。 ※使ってみたって話で、それぞれどういう特徴なのかなどの詳しい説明はしておりません。 どんな機能作ったの? 「〇〇キャンペーン」などの施策で、その日あった取引の中で特定の条件(商品ID、カテゴリーID、何円以上など)のものを絞り込み、その対象の取引に対して特定のアクションをさせます。 今回はこの機能の「特定の条件で絞る」の設計を説明していきたいと思います。 設計

                                        STI、Polymorphic関連を実際に使用した話 - エニグモ開発者ブログ
                                      • 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で日付のバリデーションを実装する
                                        • 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株式会社
                                          • Rails 5.1 で DatabaseRewinder + Activerecord-Import + PostgreSQL が上手くいかない問題が期せずして(?)解決した - ドワンゴ教育サービス開発者ブログ

                                            この記事は 第二のドワンゴ Advent Calendar 2019 の19日目の記事です。 qiita.com 誰 naari3です。 ドワンゴで N予備校 のバックエンド開発をやっています。 概要 Rails 5.0 から Rails 5.1 にアップデートする対応の最中に遭遇した現象を紹介します。 依存しているgem同士の相性が悪かった問題がRailsのアップデートによって解決されました。 内容的にはただのコードリーディングになってしまいますが、面白かったので書き起こすことにしました。 Activerecord-Import とは github.com ActiveRecord でバルクインサートをするためのgemです。 ActiveRecord::Base.import (以下 AR.import と記述します) が生えます。このメソッドにセーブしていないレコードの配列を渡す等する

                                              Rails 5.1 で DatabaseRewinder + Activerecord-Import + PostgreSQL が上手くいかない問題が期せずして(?)解決した - ドワンゴ教育サービス開発者ブログ
                                            • 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 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のデザインパターン: Formオブジェクト

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

                                                      Railsのデザインパターン: Formオブジェクト
                                                    • 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
                                                      • 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
                                                        • 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株式会社
                                                          • ActiveRecord の with_lock に先人の知恵を学ぶ - Qiita

                                                            はじめに 先日、ActiveRecord の with_lock (lock!) を調べていた時に良くできているなあ、勉強になるなあと思ったので、その辺のことを書いてみたいと思います。 なお、以下の内容は、Rails 5.2.2 及び、PostgreSQL 10.7を前提にしていることをお断りしておきます。 with_lock とは Rails Guide の Pessimistic Locking に with_lock を使ったサンプルコードが登場します。要は、データ更新時に悲観的ロックをかけてくれるというものです。 SQLレベルでざっくりいうと、 SELECT ... FOR UPDATE をしてから UPDATE できるようになるということですね。 ただ、with_lock の前にモデルが変更されていた場合、どうなるのかちょっと気になりましたので、APIを調べてみました。 コードレ

                                                              ActiveRecord の with_lock に先人の知恵を学ぶ - Qiita
                                                            • 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株式会社
                                                              • ツイッターで見つけて直した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(Rails)で効率的にツリー構造を扱うときに意識したいこと+開発例 | Wantedly Engineer Blog

                                                                    こんにちは、Wantedly で Webエンジニアをしている渡邉(@eityans) です。モチベーション・マネジメントサービスの Wantedly Pulse を開発しています。 Pulse(パルス)/ チームの状態 Slackを通じてチームの価値観を浸透させ、メンバーの抱える課題や隠れた貢献を可視化。行動のベクトルを束ね、自律して同じ価値に向かうチームを生み出す、新しいモチベーション・マネージメントツールです。 Slackを通じてメンバーの抱えるモチベーションの課題や隠れた貢献を可視化。行動のベクトルを束ね、自律して同じ価値に向かうチームを生み出します。 ... Pulseはチームの状態を可視化するツールです。会社全体をチームとして扱うこともできますが、従業員数の多い企業の場合、より小さなチームの状態を可視化したくなります。Pulseでは、上司部下の関係を設定することで、チームの設定が

                                                                      ActiveRecord(Rails)で効率的にツリー構造を扱うときに意識したいこと+開発例 | Wantedly Engineer Blog
                                                                    • Why and how GitHub encrypts sensitive database columns using ActiveRecord::Encryption

                                                                      EngineeringSecurityWhy and how GitHub encrypts sensitive database columns using ActiveRecord::EncryptionYou may know that GitHub encrypts your source code at rest, but you may not have known that we encrypt sensitive database columns as well. Read about our column encryption strategy and our decision to adopt the Rails column encryption standard. You may know that GitHub encrypts your source code

                                                                        Why and how GitHub encrypts sensitive database columns using ActiveRecord::Encryption
                                                                      • 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
                                                                        • 週刊Railsウォッチ(20200330前編)Active Record Doctorで診断、Webpacker 5、GitHubのViewComponentとRails 6.1の3rd-party component frameworkほか|TechRacho by BPS株式会社

                                                                          2020.03.30 週刊Railsウォッチ(20200330前編)Active Record Doctorで診断、Webpacker 5、GitHubのViewComponentとRails 6.1の3rd-party component frameworkほか こんにちは、hachi8833です。 つっつき前ボイス:「このところフルリモートで自宅作業していると、つい人と口をきくのを忘れちゃいそうになるので、つっつき会参加します」「そんなに」「ゴミ捨て以外まったく外に出ませんでした」「ほぼパーフェクト」 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください ⚓

                                                                            週刊Railsウォッチ(20200330前編)Active Record Doctorで診断、Webpacker 5、GitHubのViewComponentとRails 6.1の3rd-party component frameworkほか|TechRacho by BPS株式会社
                                                                          • 「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/
                                                                            • 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を書く手段いろいろ
                                                                              • 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株式会社

                                                                                  新着記事