Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
[B! ActiveRecord] YassLabのブックマーク
[go: Go Back, main page]

タグ

ActiveRecordに関するYassLabのブックマーク (16)

  • 俺が悪かった。素直に間違いを認めるから、もうサービスクラスとか作るのは止めてくれ - Qiita

    class HogehogeService # Hogehogeはモデル名まんま def process(hogehoge, option_a: nil, option_b: nil, option_c: false) history = hogehoge.histories.last unless hogehoge.active? hogehoge.histories.last.update(state: :cancel) return error_message end case hogehoge.kind when "type_a" # ... when "type_b" # ... end ActiveRecord::Base.transaction do history.save! history.create_foobars end end end 何が酷いって、機能が何なのか

    俺が悪かった。素直に間違いを認めるから、もうサービスクラスとか作るのは止めてくれ - Qiita
    YassLab
    YassLab 2025/09/27
    “単純に、ActiveRecordを中心にしたその他のモデルと責任範囲が被っていることが、大きな問題になる。明確に責任の境界線を引かないと、ただモデルにあるべきコードが散らばって見辛いだけのコードになる。”
  • 現代のRailsで不要になったgem 5+1選(翻訳)|TechRacho by BPS株式会社

    概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: 5 gems you no longer need with Rails | Arkency Blog 原文公開日: 2025/06/26 原著者: Paweł Pacana コンサルタントの仕事をやっていると、Railsコードベースのレビューを行うこともたびたびあります。Railsアプリの多くは、よくできた最新バージョンのRailsRubyで開発された、まっさらなアプリ(greenfield apps)ではありません。しかし最新ではなくても、ビジネスの成功を支えてきたのです。そうしたアプリをスムーズかつ安全に運用するには、フレームワークのメンテナンス期間を過ぎてしまわないための工夫が多少なりとも必要になってきます。 アップグレードプロセスの中で、最も楽なのはRails自身のアップグレードです。フレームワークやその構成要素同士

    現代のRailsで不要になったgem 5+1選(翻訳)|TechRacho by BPS株式会社
    YassLab
    YassLab 2025/07/30
    "最も楽なのはRails自身のアップグレード ... フレームワークやその構成要素同士の連携はうまく取れているので、新しいフレームワークのデフォルト設定を1つずつ調整しつつ、段階的にアップグレードを進めることが可能"
  • ActiveRecordでよくみるSTIをPrismaで再現する(ついでにポリモーフィックも) - Qiita

    STIについてPrismaでもできないのか検証してみました。なお、なるべくの時間短縮のため、コードや図の内容はChatGPTにヒントをもらいながら実装していますので、誤りがあればご連絡いただけると幸いです。 STI(Single Table Inheritance) Single Table Inheritance(STI)は、複数のモデルを単一のデータベーステーブルに収納できるオブジェクト指向パターンの1つです。RailsのActiveRecordが代表的ですが、他のプログラミング言語のフレームワークにも同じ概念を実装しているものもあります。 クラス図を以下のように定義します。 DBとしてはCar、Truckは存在せずVehicleだけが作成されます。これが名前の由来となってることがわかると思います。(Single Table→テーブル1つ) Ruby + ActiveRecord Ru

    ActiveRecordでよくみるSTIをPrismaで再現する(ついでにポリモーフィックも) - Qiita
    YassLab
    YassLab 2024/12/23
    “ActiveRecord + Ruby で実装 - 当たり前ですがRuby + ActiveRecordではいとも簡単に実装可能です。DBの設定やMigrationなどは省きます。/ Prisma + TypeScript - 作るのが面倒なのでやめました(笑)”
  • Kaigi on Rails 2024 に「ActiveRecord SQLインジェクションクイズ (Rails 7.1.3.4)」というタイトルで登壇します - Classi開発者ブログ

    こんにちは、ソフトウェアエンジニアの中村 ( id:kozy4324 ) です。 2024年10月25日 (金) から 26日 (土) に、東京の有明セントラルタワーホール & カンファレンスで開催予定の Kaigi on Rails 2024 にて、「ActiveRecord SQLインジェクションクイズ (Rails 7.1.3.4)」というタイトルで登壇させていただくことになりました。 今回は、このテーマを選んだ背景や、登壇を通じて達成したいことについて、事前にお伝えしようと思います。 Rails アプリケーション開発におけるセキュアコーディング、できていますか? これは自戒の念を込めた問いかけでもあります。 昨年末、私は Ruby on Rails を使った新規サービス開発プロジェクトにジョインしました。それを機に、Rails におけるセキュアコーディングを再確認したいと思い、情報

    Kaigi on Rails 2024 に「ActiveRecord SQLインジェクションクイズ (Rails 7.1.3.4)」というタイトルで登壇します - Classi開発者ブログ
    YassLab
    YassLab 2024/10/10
    "IPAが公開している「安全なウェブサイトの作り方」や書籍『体系的に学ぶ 安全なWebアプリケーションの作り方』が非常に参考になりました。Railsにフォーカスした内容でいえばRailsガイド「Railsセキュリティガイド」は必読"
  • ActiveRecord SQLインジェクションクイズ (Rails 7.1.3.4)

    問題 ActiveRecordクイズです。SQLインジェクション可能なのはどれでしょう? (Railsバージョンは7.1.3.4、複数回答あり) 1️⃣ User.find_by(id: params[:id]) 2️⃣ User.where("id = #{params[:id]}") 3️⃣ User.order("id #{params[:order]}") 4️⃣ User.exists?(params[:id]) 正解と解説 SQLインジェクション可能なのは 2️⃣ と 4️⃣ 1️⃣ User.find_by(id: params[:id]) エスケープ処理が入るため これは安全な呼び出しです。 Railsガイドにも引用があります。 Model.find(id)やModel.find_by_*(引数)といったクエリでは自動的にこの対策が適用されます。 2️⃣ User.wher

    ActiveRecord SQLインジェクションクイズ (Rails 7.1.3.4)
    YassLab
    YassLab 2024/07/22
    “ユーザー入力を直接渡すな!という話はそれはそう。大前提としてそれはまず最初に守らなければならない / Brakemanというツールが最近気になっている。Railsに特化したセキュリティの静的解析ツールです。”
  • [Rails]あ…ありのまま、今起こった事を話すぜ!「おれはorder(created_at: :asc)と実装したと思ったら、created_at descのSQLが実行されていた」 - Qiita

    な… 何を言っているのかわからねーと思うが おれも 何をされたのか わからなかった… 頭がどうにかなりそうだった… reverse_orderをチェーンしていただとか超スピードだとか そんなチャチなもんじゃあ断じてねえ もっと恐ろしいものの片鱗を味わったぜ… ということで、前置きはここまでにして実際に私が体験した話です。 タイトルの通りorder(created_at: :asc)と実装したのに、SQLcreated_at descと実行される実装について説明します。 ここまでの話だけで、パッと実装が思い浮かぶ方はActiveRecordマスターだと思います…! 私は10年弱Rails触っていますが、初めて気づきましたw 実装 わかってしまえば、やり方は簡単です。 Userというモデルがある場合、下記実装では発行されるSQLのorderは逆になります。

    [Rails]あ…ありのまま、今起こった事を話すぜ!「おれはorder(created_at: :asc)と実装したと思ったら、created_at descのSQLが実行されていた」 - Qiita
    YassLab
    YassLab 2024/07/03
    “SQLには最後の値のみを取得する命令がありません。一方、先頭の値であれば、limit 1で取得できます。そのためSQLで最後尾の値を取得したい場合はorderを逆にして先頭の値のみを取得する / 効率の良いSQLに変換”
  • 『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか

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

    『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
    YassLab
    YassLab 2024/04/25
    "お金以外の部分(アプリのAPIサーバ、管理画面)=Ruby on Rails - ORMやmigration、テストのフレームワークとか個別に選ぶ必要がない:考慮・調査工数を大幅に削減できる / お金を取り扱う部分=Golan(Gin with Ent)"
  • 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"
    YassLab
    YassLab 2024/03/29
    “This one is not a gem, but eh, did you know you can hit the /rails/info/routes route in Rails and get a list of your routes? No need to call bin/rails routes. Plus, it’s searchable, and you can toggle between the path and URL helper. Great when you need a quick copy-paste for your views. ”
  • activerecord-originator をリリースしました - pockestrap

    こんにちは。 id:Pocke です。 今日は activerecord-originator という gem を作ったので紹介します。 github.com なにこれ Active Record が発行するSQLの各部分に、それがどこで作られたものかをコメントとして入れ込む gem です。 理解するには実例を見るのが早いでしょう。次のログはArticlesController#indexで実行されるクエリの例です。 Article Load (0.1ms) SELECT "articles".* FROM "articles" WHERE "articles"."status" = ? /* app/models/article.rb:3:in `published' */ AND "articles"."category_id" = ? /* app/controllers/artic

    activerecord-originator をリリースしました - pockestrap
    YassLab
    YassLab 2024/03/14
    "SQL の組み立てが複雑になると、この gem が真価を発揮 / そのクエリがどのように組み立てられたかがピンポイントで分かる / default_scope のような、どこで付与されたのか分かりづらい条件をデバッグする際にも役立つ"
  • 『SQLアンチパターン』を読む

    CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT NOT NULL, FOREIGN KEY (parent_id) REFERENCES Comments(comment_id), ); 階層の深さに関わらず子孫を取得したい場合、再帰的なクエリを実行しなければならない MySQL8.0、PostgreSQLでは再帰クエリをサポートしている ノードの削除が大変(これも再帰的な操作が必要になる) ON DELETE CASCADEをつければ自動化できる CASCADE = 連鎖的に アンチパターンを用いてもいい場合:必要な操作が「ノードの直近の親子を取得」「ノードの挿入」のみである場合 解決策:経路列挙モデル、入れ子集合モデル、閉包テーブルモデル 経路列

    『SQLアンチパターン』を読む
    YassLab
    YassLab 2024/03/08
    “Active RecordはRails用語じゃなかった - Railsガイド”
  • ActiveRecord で integer 型カラムの数値範囲に制限をかける

    Rails の ActiveRecord で、数値型のカラムに対して数値範囲の制限をかける方法について備忘録としてまとめます。 結論 migration ファイルで指定する limit は大きさではなくバイト数 Model 側で numericality validates を設定したほうがよさげ 有効/無効 のような数種類のフラグや選択式の値を管理するなら、enum の方がわかりやすい やりたかったこと モデル名やカラム名は架空のものですが、以下のように、integer 型のカラム(:age, :account_status)に入る数値に以下のような数値範囲の制限をかけたかったのです。 カラム 制限

    ActiveRecord で integer 型カラムの数値範囲に制限をかける
    YassLab
    YassLab 2024/03/08
    “ t.integer :age, default: 0, limit: 19, comment: "年齢" / これは間違いで、この場合、age カラムは 19 バイトの制限をかけようとしているということになります。 / Active Record マイグレーション - Railsガイド”
  • 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株式会社
    YassLab
    YassLab 2023/06/09
    “気づいたのは、私が書いたテストケースはこの問題を検出できるほど賢くなかったということです。 ... / どうやって解決したかですか?方法は実に明白で、要は私がfind呼び出しにtapを足し忘れていただけだったのです”
  • ankane/strong_migrations: Catch unsafe migrations at dev time

    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

    ankane/strong_migrations: Catch unsafe migrations at dev time
    YassLab
    YassLab 2023/04/30
    “Strong Migrations: Catch unsafe migrations in development / ✓ Detects potentially dangerous operations / ✓ Prevents them from running by default / ✓ Provides instructions on safer ways to do what you want Supports PostgreSQL, MySQL, and MariaDB / 🍊 Battle-tested at Instacart”
  • Rails: Active Recordモデルのカラムを安全に削除する(翻訳)|TechRacho by BPS株式会社

    概要 元サイトの許諾を得て翻訳・公開いたします。 英語記事: Safely Remove a Column from an Active Record Model - Andy Croll 原文公開日: 2022/11/14 著者: Andy Croll 参考: Rails API ignored_columns= -- ActiveRecord::ModelSchema::ClassMethods 既存のActive Recordモデルに新しいカラムを追加してデプロイするのは、多くの場合問題なくできます。通常は、最初のデプロイでマイグレーションを実行し、それが終わってから、次にデータベースに追加されたカラムを利用する新しいコードをリリースするという手順になります。 しかし、カラムを削除する場合は問題が起きやすい傾向があります。Railsアプリケーションを起動すると、Active Reco

    Rails: Active Recordモデルのカラムを安全に削除する(翻訳)|TechRacho by BPS株式会社
    YassLab
    YassLab 2023/04/30
    "カラムを削除するときは手順を分割する戦略が有用 / 最初に、ignored_columns で Active Record がそのカラムを無視 / 次に、データベースのカラムを実際に削除するマイグレーションを作成 / 冒頭で追加した ignored_columns 行を削除"
  • Rails: 認証gem 'Rodauth'を統合するrodauth-railsを開発しました(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: What It Took to Build a Rails Integration for Rodauth | Janko's Blog 原文公開日: 2022/10/12 原著者: Janko Marohnić 日語タイトルは内容に即したものにしました。 参考: 週刊Railsウォッチ20221025 RodauthをRailsと統合するのに必要だったこと 以下のrodauth-rails READMEもどうぞ。 Rails: 認証gem ‘rodauth-rails’ README(翻訳) Rodauthが登場した当時の既存のソリューションは、Rails(DeviseやSorceryの場合)か少なくともActive Record(Authlogicの場合)が必要だったので、ついにRailsに縛られないフル機能の認証フレームワ

    Rails: 認証gem 'Rodauth'を統合するrodauth-railsを開発しました(翻訳)|TechRacho by BPS株式会社
    YassLab
    YassLab 2023/02/28
    “Railsで使うときの利便性をそれらと同じ水準まで高める必要がありました。つまり、Railsフレームワークに深いレベルで統合し、コードの置き場所を明確にし、手軽に始められるデフォルト値を用意する必要があった”
  • STIとautoloadingとRails 7 - Money Forward Developers Blog

    こんにちは。マネーフォワード クラウド会計Plus (以下会計Plus)でエンジニアをしているぽっけです。 しばらく前に、会計PlusのRails 7へのアップグレードが完了しました。その中では様々な対応を行いましたが、この記事では特に印象的だったSTIとautoloadingの対応についてご紹介しようと思います。 STIとautoloadingは相性が悪いです。Rails 7以前は簡単な修正でこれらが共存して動いていましたが、Rails 7ではそのコードが動かなくなってしまいました。この問題は最終的には修正されましたが、それまでに紆余曲折あり修正までに何回ものPull Requestが必要になりました。 ⁠対象読者 Ruby on Railsを使用した開発経験があることを前提としています。また、STIやautoloadingについて詳細な説明はしません。それらを知らない場合は、該当するR

    STIとautoloadingとRails 7 - Money Forward Developers Blog
    YassLab
    YassLab 2022/11/16
    “STIとautoloadingは相性が悪いです。Rails 7以前は簡単な修正でこれらが共存して動いていましたが、Rails 7ではそのコードが動かなくなってしまいました。この問題は最終的には修正されましたが、それまでに紆余曲折あり”
  • 1