ActiveRecord における DB との接続確立方法をきちんと理解できてなかったので、pry-byebug を使いながらコードを読み解いてみる。 Railsのversion は 4.2.0 という前提で。 establish_connection blog.livedoor.jp sonots さん解説の通り、Rails を起動すると establish_connection メソッドが呼び出される。 # lib/active_record/connection_handling.rb def establish_connection(spec = nil) spec ||= DEFAULT_ENV.call.to_sym resolver = ConnectionAdapters::ConnectionSpecification::Resolver.new configuratio
こんにちは、鈴木です。 Ruby on Rails で複数のデータベースを扱う方法をご紹介します。 establish_connection establish_connection はデータベースと接続するためのメソッドです。 通常は明示的に呼び出すことはありませんが、複数のデータベースを使用する場合は、以下のように明示的に呼び出す必要があります。 class User < ActiveRecord::Base establish_connection :adapter => 'postgresql', :encoding => 'unicode', :database => 'other_database', :pool => '5', :username => 'USERNAME', :password => 'PASSWORD', :host => 'localhost' end
Nowadays, there is a growing need to have mechanisms that allows us to control who performed a particular action in a system. Rails provide us a lot of useful tools that help us build awesome solutions, but by default it does not offer us relevant tools to achieve this purpose. Most of the time what we get to know is the date of the last change of a particular record and the date of its creation,
この記事はRails Advent Calendar 2014の21日目の記事です。 Qiitaでは投稿の履歴管理にpaper_trailというgemを使っています。本稿ではPaperTrailがどんな感じでイベント情報をDBに保存しているかを紹介しつつ、PaperTrailが作り出すversionオブジェクトの渡り歩き方を簡単に解説したいと思います。 PaperTrailを使ってみよう 前提 PaperTrailで管理している Item modelがあり、そのインスタンスを2回編集してから削除したとします。 コードで表現するならこんな感じです。 class Item < ActiveRecord::Base has_paper_trail end item = Item.create(body: 'foo') item.update_attributes(body: 'bar') ite
はじめに Rails チュートリアルなどで、Railsの勉強をしていてフォームの実装をしていた時に、フォームを追加したい場合、当然カラムもしなければいけません。色々調べていたら勉強になったので、まとめておきます。 環境 この記事では以下の環境(2018年6月18日時点)で動作確認できました。 Ruby: 2.4.1 Rails: 5.0.7 現状 micropostsという名前のテーブルに、新たにstatusというカラムを追加したい場合 mysql> describe microposts; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+----
uniqueness: scopeを利用して一意性検証をする方法について解説します。 目次 動作環境 実装例 解説 複数のscope データベース側の制約 おわりに 動作環境 OS : macOS Mojave 10.14.6 ruby : 2.6.3p62 rails : 5.2.4 実装例 class Label < ApplicationRecord has_many :labelings, dependent: :destroy belongs_to :user, optional: true validates :name, presence: true, uniqueness: { scope: :user } end ユーザはタスクに紐付けるラベルを作成することができますが、各ユーザは同じ名前のラベルを作れないようにラベルモデルのnameカラムに一意性制約をつけています。 実
Railsでアプリ開発中にバリデーションをかけようと思い、 一意性制約(テーブル内で重複するデータを禁止する)の記述について、ネットで調べていると、 unique:true uniqueness: true上の2つで出てきて、どっち!?違いはなに!?ってなったんで調べてみました。 まず前提として一意性制約には以下の2パターンのやり方があるという事。 ①アプリケーション側に設定➔モデルに記述(uniquness:true) ②DB側に設定➔マイグレーションファイルに記述(unique:true) まず①についてはこんな書き方 class User < ApplicationRecord validates :name, uniqueness: true end user.rb 続いて②についてはこんな感じ class AddEmailToUsers < ActiveRecord::Migra
状況 userとroomを紐付けるpermissionsテーブル(部屋に入れる許可証を管理)を作成したい references型でuser, taskをカラムにもつ 既にテーブルに存在する(user_id, task_id)のセットが入力された際、保存しない制約 このバリデーションが正常に動作するかをコンソールで確認したい 「一意性制約」を使えば実現できるこちらのバリデーション。 今回はこれがちゃんと実装できているか、rails cで立ち上げたコンソールでの操作についての記録です。 環境 macOS Catalina 10.15.6 ruby 2.6.5 Rails 6.0.3.4 MySQL : 5.6.47 今回のコード class Permission < ApplicationRecord belongs_to :user belongs_to :task validates :u
はじめに 背景 ActiveRecord::AttributeMethods::Dirtyとは メソッド一覧 メソッド名の変遷 活用に向けた検証 検証に使用したモデル Dirtyの活用例 実現したかったこと/実装例 Dirtyの活用したサンプルコード おわりに 参考 はじめに はじめまして、スタメンでエンジニアをしているショウゴです。普段は、バックエンドグループでRuby on Railsを用いてバックエンドの開発を主に担当しています。 今回の記事では、ActiveRecordのattributeの変更状況を確認できるRailsのActiveRecord::AttributeMethods::Dirtyモジュールの使い方の検証結果と活用例を紹介します。 背景 今回、特定のカラムの値を変化させて、ステータスの変更・管理を行っているモデルに対して新たなバリデーションを実装する作業の中で、特定の
こんにちは。弥生で Misoca を開発している小坂と申します。インターネットには kosappi という名前で存在しています。 前回ご紹介した みんなのコンピュータサイエンス は読んでいただけたでしょうか? 9月末で事業年度が終わる会社は多いかと思います。みなさんは無事に10月を迎えることはできましたか?私は有給休暇の日数が付与されて、とても良い気分です 🏝 今回は、Rails の複数 DB 機能を利用して9月末の高負荷を乗り切った話を紹介いたします。 🔥 月末の高負荷 Misoca は請求書作成ソフトということもあり、月末にアクセスが増加します。 ユーザの増加や、機能が充実したことにより、DB への負荷も増加しています。8月末の負荷は DB の限界に近い値でした。 特に、文書の一覧や検索などの参照系のクエリの比重が高く、機能の充実によってクエリ自体も重いものになっており、問題になっ
概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: The Difference Between a Cache and a Read Models, an example | Arkency Blog 原文公開日: 2021/11/24 原著者: Tomasz Wróbel サイト: arkency.com 以下のような、そこそこ複雑なビューがあるとします。カレンダー的なテーブルがあって、横軸は貸部屋、縦軸は利用可能な期間を表しています。 もちろん、このビューでは以下のような機能が欲しくなります。 利用可能かどうかや場所を指定してフィルタする機能 ソート機能 貸部屋リストのページネーション 期間のページネーション(別の期間を参照する) サーバーがJSONを配信すると、SPAフロントエンドのようなクライアントがそのJSONを消費する形になります。 以下のようなさまざまなテーブルにあ
0. はじめに 0-0. はじめに 以前、「Rails における内部結合、外部結合まとめ」や「ActiveRecordにおけるGROUP BYの使い方」という記事を書いたのですが、サブクエリに関して、特にサブクエリと結合するときにActiveRecordでどう記述すればいいのか逡巡したときがあったので、備忘録的に記述します。 また、Otemachi.rb#7にて、「いまさらサブクエリ」というタイトルでLTも行ったので、こちらも参考になるかもしれません。 0-1. RubyとRailsとPostgreSQLのバージョン $ ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16] $ rails -v Rails 5.2.0 => SELECT version(); version ---------------
RubyでFirestoreからデータを取得したり追加したり 今回は、RubyでFirestoreからデータを取得する際のクエリ発行してくれるコードやデータを追加するコードに関してまとめます。 Firestoreとは Firebaseが用意しているNo SQLのクラウドデータベースです。 用語 Firestoreにおける用語はとりあえず、下記の3つを知っておけば大丈夫だと思います。 Cloud Firestore データモデル コレクション データ(ドキュメント)を格納する大枠。FirebaseコンソールのサイドバーにあるCloud Firestoreをクリックすると、画面の1番左にあるのがコレクションになる。1つのコレクションに、それに関するデータ(ドキュメント)が保存されていく。 ドキュメント コレクションに格納されていくデータ。データは一意のドキュメントIDというもので管理されており
はじめに 多くのRails初学者はSQL文をあまり意識せずActive Recordを使用してしまっているかと思います。しかしデバッグ作業や複雑な絞り込みには生のSQL文を利用する機会はそれなりに多く、また実行されているSQLを理解していないままだと気づかぬうちに非効率なコードを書いてしまっている可能性があります。 そこで本記事ではActiveReocordメソッドで実行されているSQL文をまとめてみました。 メソッドとSQL文 find User.find(1) # SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 User.find([2,3,4]) # SELECT `users`.* FROM `users` WHERE `users`.`id` IN (2, 3, 4) findメソッドでは「引数をidに持つ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く