タグ

railsとActiveRecordに関するryonknのブックマーク (18)

  • Active Recordともっと仲良くなって自然に優しいコードを書くぞ - SmartHR Tech Blog

    こんにちは。SmartHRRails顧問業をしています @willnetです。最近は主にリファクタリングをしています。 SmartHRのバックエンドは基的にRubyで書かれています。しかし入社してくるバックエンドエンジニアは必ずしもRubyRailsを長年使ってきた人だけではなく、前職では他言語を使っていてRuby(Rails)はほとんど使ったことがないという人もいます。 webアプリケーションを作る、という点ではどの言語でも抑えるべき点は同じですが、RubyRailsに特化した考え方や書き方もありますよね。SmartHRではそれを効率よく習得してもらうために読書会を開催したり、社内のドキュメントツールに知見を書いて共有したりしています。 僕も社内のドキュメントツールにActive Recordの付き合い方ついて書いたところ、評判が良く「テックブログにしたら?」と言われたので今回一

    Active Recordともっと仲良くなって自然に優しいコードを書くぞ - SmartHR Tech Blog
  • 「表参道.rb #38 〜Railsアンチパターン〜」 レポート - ナガモト の blog

    表参道.rb #38 〜Railsアンチパターン〜 - connpass こちらのイベントに参加してきたので、レポート書きます ※遅刻参加だったのと自分でLTしたのでメモとか少なめです イベントの雰囲気・参加者 穏やかな雰囲気で非常にいい LTの前に軽い自己紹介などして場づくりをしていたらしいです 素晴らしい取り組みですね (遅刻参加だったのでよくわからないですが) 参加者はruby, Rails界隈で超有名人が複数人と 新米エンジニアを卒業したくらいの人と熟練者とどちらもいた気がします 会場提供の株式会社ビジネスバンクグループ様ありがとうございます LT 質疑や口頭など気になったところをメモとして追記しています ※発言者≠発表者 xxx 途中参加&メモ不足です クエリビルダークラスを作ったみたいなお話をしていました 発表者の方にはぜひ資料あげていただきたいです! Form Object

    「表参道.rb #38 〜Railsアンチパターン〜」 レポート - ナガモト の blog
  • Rails マイグレーションの廃止とRidgepoleの導入・利用方法 - Qiita

    概要 lismoaついにマイグレーションやめるってよ クックパッドが使ってるRidgepoleというスキーマ管理用のコマンドラインツールを使おうぜ Ridgepoleクックパッドエンジニアが作っとるやん 結構使いやすいやん 使い方解説します マイグレーション廃止の理由 昨今のlismoa多機能化に伴いRailsプロジェクトが複数に分裂してきました。 現在のプロジェクトは以下の4つです。 app(体) batch(バッチ用) api(他システム連携用) admin(管理用) これらのプロジェクト全てで同じDBを参照しています。 そうすると各プロジェクトごとのマイグレーションファイルを同状態に揃えないとDBの完全な整合性が取れないという問題が生じてしまいます。 この対応として、今までは定期的に全プロジェクトのマイグレーションファイルとモデルを揃える作業をしていました。 これが非常にナンセン

    Rails マイグレーションの廃止とRidgepoleの導入・利用方法 - Qiita
  • ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita

    ActiveRecordでN+1クエリを潰すためにeager loadingを行う場合、preloadやincludesやeager_loadが役に立つ。 Preload, Eagerload, Includes and Joinsという記事にそれらの違いがよくまとめられているんだけど、includesが挙動を変える条件があまり正確に書かれていなくて自信が持てなかったし、そもそも記事が古いのでRails4.1.5のソースを読んで調べた。 せっかく調べたので、全体を通して日語でまとめてみようと思う。 User.joins(:posts).where(posts: { id: 1 }) # SELECT `users`.* FROM `users` INNER JOIN `posts` ON `posts`.`user_id` = `users`.`id` WHERE `posts`.`id

    ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita
  • クックパッドにおける最近のActiveRecord運用事情 - クックパッド開発者ブログ

    インフラストラクチャー部の成田(@mirakui)です。 Rails の OR マッパーである ActiveRecord ですが、みなさんどのように運用していますか? ActiveRecord を使うと、 SQL を直接扱うことなく、抽象化された表現で RDB にアクセスできるので、アプリケーションの開発効率という観点ではメリットが大きいです。 一方で、 ActiveRecord が駆使されているアプリケーションをサーバに配置してプロダクションとして運用する立場からすると、いくつかの問題に突き当たります。 まずはクックパッド体アプリケーションにおける、最新の rake stats をご覧ください。 +----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC

    クックパッドにおける最近のActiveRecord運用事情 - クックパッド開発者ブログ
  • Rails 4.1.0 の ActiveRecord enums を使ってみる | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、鈴木です。 先日、Rails 4.1.0.rc1 がリリースされました。 リリースノートをパラパラを見ていたら ActiveRecord enums という新機能があったので試してみました。 ActiveRecord enums とは 会員のデータを保持する users テーブルを作成して、会員ステータスを保持する status カラムを用意して、その値が 0 なら仮登録、1 なら登録、2 なら退会済みにしよう、・・・ということって良くありますよね? ActiveRecord enums は、モデルクラスでこんな風に使います。 class User < ActiveRecord::Base # ステータス: temporary (仮登録), active (登録), resign (退会). enum status: %i(temporary active resign)

  • ユーザとユーザを多対多で関連付けるモデルを共通化する - Hidden in Plain Sight

    思いのほか前回のRailsプチ・デザインパターンの紹介に反応があったので、こういう小ネタも出していったほうがいいのかな、ということで第二弾。 ソーシャル系アプリだと、ユーザとユーザを関連付ける多対多のモデルがたくさんでてきます。たとえば、一般的なところではフォローとかブロックとか足あととか。さらにデーティングサイトになると、ウィンクだったり、Secret admirer(こっそりlikeするけど両思いだったらおめでとうって通知がくるってやつ)だったり、いろいろなモデルがこのパターンにあてはまります。 この場合、「AがBをフォローしている」「BがAをフォローしている」「AとBがお互いにフォローしている」という3つの状態があるわけですが、相互フォローの状態は「AがBをフォローし、かつBがAをフォローしている」と読み替えてSQLでも記述可能なので、以下ではシンプルに単方向のグラフで全てを扱うもの

    ユーザとユーザを多対多で関連付けるモデルを共通化する - Hidden in Plain Sight
  • プライマリキーを使った1:1関連でカラム数の多いテーブルを分割する - Hidden in Plain Sight

    おそらく多くのソーシャル系アプリにあてはまるRailsのプチ・デザインパターン的な話。 ぼくが今やっているEast Meet Eastには、ユーザごとに数多くのプロフィール属性があります。名前、性別、生年月日、郵便番号、職業などなど、カラム数にしてざっと25個。これを、全部ひとつのusersテーブルに詰め込むのは、コードの見通しという観点からも性能の観点からも、あまりよろしくありません。 なぜならば、ユーザ関連の情報を扱う局面としては主に メールアドレスとパスワードなどを使ってログインする(アカウント情報) プロフィール情報で条件を指定してユーザを検索・推薦する(プロフィール情報) という2つの独立性の高いユースケースにわかれるため、ログイン処理をやってるときにはプロフィール情報はいらないし、プロフィールを検索してるときにはメールアドレスやパスワードをロードするのは無駄です。また、開発やデ

    プライマリキーを使った1:1関連でカラム数の多いテーブルを分割する - Hidden in Plain Sight
  • Rails 4.0 で多対多関連 - ryutamaki

    この記事内では、"timeline"モデルと,"user"モデルをどのようにして接続する事が出来るかを見ていきます。 timeline.user user.timeline 等でアクセス出来るように作っています(つもりです)。 Rubyや、Railsの経験が浅いため、もっと良い方法を知っている方、間違えを見つけた方はコメントを頂けるととてもうれしいです。 またポリモーフィズムを使用した関連付けに関しては触れていません。 あくまで導入部分だと思って参照して頂ければとおもいます。 HABTM has_and_belongs_to_many を使った例。 モデルをいくつかの種類に分けて参照させたいときなどに便利です。 #/app/models/user.rb class User < ActiveRecord::Base has_and_belongs_to_many :timelines_me

    Rails 4.0 で多対多関連 - ryutamaki
  • 【Rails】has_many throughな関係で、複数レコードを new/create する時の書き方 - Qiita

    # postのインスタンスを作成 irb > post = Post.new => #<Post id: nil, title: nil, created_at: nil, updated_at: nil> # 空のインスタンスを確認 irb > post => #<Post id: nil, title: nil, created_at: nil, updated_at: nil> # post.author_postsの確認 # 空のArray irb > post.author_posts => #<ActiveRecord::Associations::CollectionProxy []> # post.authorsの確認 # 空のArray irb > post.authors => #<ActiveRecord::Associations::CollectionProxy

    【Rails】has_many throughな関係で、複数レコードを new/create する時の書き方 - Qiita
  • ActiveRecordの関連のすべて ー StoneDot の Ruby on Rails 講座

    今回は ActiveRecord ついて説明していきたいと思います。 A Guide to Active Record Associationsと、 Active Record Query Interface を参考にしました。 また、図もこちらから拝借させていただきました。 Rails での関連 Rails では関連を設定することでモデルオブジェクトを接続し構造を作ることが出来ます。 関連の設定はモデルクラスに宣言的にメソッドを書き入れることによって行います。 使えるメソッドとしては大きく分けて以下の6種類があります。 belongs_to has_one has_many has_many :through has_one :through has_and_belongs_to_many ここからはこれらのメソッドをどのように使うのかを説明していきたいと思います。 一対一関連 一対一関

    ActiveRecordの関連のすべて ー StoneDot の Ruby on Rails 講座
  • ActiveRecord4でこんなSQLクエリどう書くの? Merge編 | Webシステム開発/教育ソリューションのタイムインターメディア

    ActiveRecord4でこんなSQLクエリどう書くの? Merge編 #activerecord#rails#ruby 2013年 10月 24日 nishio 「このデータ取得するのにSQLではこういう風に書けばいいんだけど、ActiveRecordでは一体どう書けばいいの?」 毎回この課題に悩まされています。 特に業務アプリの場合、とてつもなく複雑なSQLを投げる場合があります。 ものすごい数のテーブルをjoinして、existsで条件みて、union allして。。。 なんていう処理がでてくると、さすがにActiveRecordやDatamapperを使ってクエリを組み立てるのをあきらめて、直接SQLを書いてしまうことがあります。 でも、できればActiveRecordを使ってスマートにSQLを組み立てたいものです。 scopeで書いておけば、処理も使い回せますしね。 ということ

    ActiveRecord4でこんなSQLクエリどう書くの? Merge編 | Webシステム開発/教育ソリューションのタイムインターメディア
  • Rails:belongs_toの項目の検証方法 | 自転車で通勤しましょ♪ブログ

    追記:inverse_ofを使いましょう。 http://319ring.net/blog/archives/2724 以下、原文。 Railsやってていつもbelongs_toの項目の検証をどうするのかで迷っていたのですが、自分はこれが最適解なのかなーと思ったのがあったので書いておきます。 belongs_toのデータを必須にしたいのですが、:presence => trueだと必須というだけでちゃんとリレーション先に存在するidじゃない場合があるので信頼性にかけるので、どうするべきか?と悩んでいました。:inclusionでやるのがいいのかな?と思っていたのですが、どうにも重たそうだし、ほかに方法があるんじゃないのかなーと。 Web+DB Pressの70号で紹介されているのですが、Rails3.2以降ならば、modelでpluckというメソッドが使えるようになっています。これは、指定

  • Rails – 親子テーブルを一度に更新する方法 | 株式会社田村倉庫

    上記のような一画面に基情報(宛先、住所)と複数の明細情報(物品名、数量)がある画面で入力された情報を親子関係にある基テーブル(発送テーブル)と明細テーブル(物品テーブル)に同時に登録したい場合が業務アプリではけっこうあると思います。 Railsではこのようなケースに簡単に対応するための便利機能が用意されています。具体的にはモデルでaccepts_nested_attributes_forという設定を、ビューでfield_forメソッドを利用します。この機能を利用すると以下の2つメリットがあるので是非活用することをオススメします。 ソースコードが短くてすむ ⇒ 後述しますが、特にコントローラー側の記述量は激減します。 明細データへのバリデーション結果が画面にキレイに表示できる ⇒ 親子関係をRailsに認識させることで明細データのバリデーション結果を表示するロジックを個別に実装する必要が

    Rails – 親子テーブルを一度に更新する方法 | 株式会社田村倉庫
  • Rails 3&4: Arel::Tableを使ってなるべく生のSQLを書かずに済ます方法|TechRacho by BPS株式会社

    Railsでプログラムを書いるとSQLを直接記述する機会が意外と多いので、 なるべくRubyらしく書く方法がないか調べてみました。 ORなどかなり基的な構文でもarel_tableを使う必要があるのですね。 というわけで、Arel::Table を使ってみました。 動作確認環境は以下の通りです。 ruby: 1.9.3-p392 Rails: 3.2.13 arel: 3.0.2 MySQL: 5.1.65 検索条件をORで繋げたい 基的な構文ですがSQLを直接記述する場合が多いのではないでしょうか? User.where("name = ? OR name = ?", "太郎", "花子").to_sql #=> "SELECT `users`.* FROM `users` WHERE (name = '太郎' OR name = '花子')" なるべくRubyで書こうとするとこうな

    Rails 3&4: Arel::Tableを使ってなるべく生のSQLを書かずに済ます方法|TechRacho by BPS株式会社
  • 既存のscopeからor条件のSQLを組み立てる - Qiita

    class User < ActiveRecord::Base scope :male, ->{ where(sex: :male) } # 男性 scope :female, ->{ where(sex: :female) } # 女性 scope :adult, ->{ where(arel_table[:age].gteq 20) } # 成人 scope :minor, ->{ where(arel_table[:age].lt 20) } # 未成年 scope :men, ->{ adult.male } # 成人,男性 scope :women, ->{ adult.female } # 成人,女性 scope :boys, ->{ minor.male } # 未成年,男性 scope :girls, ->{ minor.female } # 未成年,女性 end User

    既存のscopeからor条件のSQLを組み立てる - Qiita
  • Rails で、Controller に定義されている action を一度に取得する方法はありますか? - QA@IT

    平素よりQA@ITをご利用いただき、誠にありがとうございます。 QA@ITは「質問や回答を『共有』し『編集』していくことでベストなQAを蓄積できる、ITエンジニアのための問題解決コミュニティー」として約7年間運営をしてきました。これまでサービスを続けることができたのは、QA@ITのコンセプトに共感をいただき、適切な質問や回答をお寄せいただいた皆さまのご支援があったからこそと考えております。重ねて御礼申し上げます。 しかしながら、エンジニアの情報入手方法の多様化やQAサービス市場の状況、@ITの今後のメディア運営方針などを検討した結果、2020年2月28日(金)15:00をもちましてQA@ITのサービスを終了することにしました。 これまでご利用をいただきました皆さまには残念なお知らせとなり、誠に心苦しく思っております。何とぞ、ご理解をいただけますと幸いです。 QA@ITの7年間で皆さまの知識

    Rails で、Controller に定義されている action を一度に取得する方法はありますか? - QA@IT
  • #326 ActiveAttr - RailsCasts

    かつてエピソード219で、ActiveModelを用いて、データベーステーブルを裏に持たないながらデータ検証などのActiveRecordの機能を持ったモデルを作成しました。ActiveModelが優れているのは確かですが、このように直接利用するにはあまり使いやすいとは言えません。例えば入力データの検証機能を持ったモデルを作るとなるとシンプルなものでもかなりの量のコードを書くことになります。 class Message include ActiveModel::Validations include ActiveModel::Conversion extend ActiveModel::Naming attr_accessor :name, :email, :content validates_presence_of :name validates_format_of :email, :w

  • 1