Transformational Software Engineering Lead your team into the future with unprecedented visibility. Details
このエントリで書いた内容は、ほぼ Growing Rails Applications in Practice の内容が元になっています。英語ですが、ここで挙げた内容以外にもコードを綺麗に保つテクニックが書かれており、かつページ数も少なく読みやすいです。コードを綺麗に保つのが好きな方は一読してみることをおすすめします。 はじめに Rails で fat model を避けるための方法は、7 Patterns to Refactor Fat ActiveRecord Models を始めとして、多くのやり方が存在します*1。 validation や callback は ActiveRecord(以下AR) を継承せずとも利用することができます。7 Patterns to Refactor Fat ActiveRecord Models の 「3. Extract Form Objects
追記: 2017/09/06 少しAPIが冗長なもののActiveRecordへのモンキーパッチが少ないバージョン activerecord-precounter というのを作りました。こちらの方がバグりにくいはずなので、現在はactiverecord-precounterの方を使うことが推奨されます。 github.com 概要 N+1 countクエリを最大11.7倍速くできるactiverecord-precountというgemを作った。 *1 k0kubun/activerecord-precount N+1 countクエリ Tweet.all.each do |tweet| p tweet.favorites.count end # SELECT `tweets`.* FROM `tweets` # SELECT COUNT(*) FROM `favorites` WHERE
注意!! このエントリの内容はRails3.1.3での実行結果を元にしています。 将来的にこの内容が最新のRailsの仕様と異なる可能性も高いので、トラブルシューティングの目的でこのエントリを参照する場合は使用中のRailsバージョンをよく確認してください。 Rails3.1からはマイグレーションでchangeというメソッドが導入されました。 以前はUpメソッドに変更用の処理を、Downメソッドにロールバック用の処理を書く必要があったのですが、changeメソッドを使うとUpに相当する記述だけで済みます。 あとはRailsが自動的にDownに相当する処理を考えてくれます。(つまり、コードがよりDRYになります) # Ruby 3.0以前 class AddAgeToUsers < ActiveRecord::Migration def self.up add_column :users,
例えば複数画像付き投稿ができる掲示板をイメージしたとき、スレッド→投稿→画像という多段構成のモデルができる。 で、となりあう関係のモデル同士は、has_manyとbelongs_toで参照しあえるけど、スレッド→画像や画像→スレッドは一工夫する必要がある。 スレッド→画像はhas_many throughを使えばいいけど、逆の画像→スレッドbelongs_toでthroghはできないので困った。誰かがhas_oneを使うという手を挙げてたけどバッドノウハウ的にしか思えなくてしっくり来ない。 で、いろいろ調べてみたところdelegateを使うのが一番スマートに思えた。 class Thread < ActiveRecord::Base has_many :posts has_many :post_images, through: :post class Post < ActiveRecord
システム開発部のKです。 先日ついにRails4.0がリリースされましたね。 自分はまだRails初心者なのですが、せっかくなら新しいバージョンで始めたほうがよいかと思い、betaの時からアプリを作り始めました。(かなり無謀ですが) その中で、Rails3のサンプルを基に組んだ部分が上手くいかなくて、かなりハマった箇所がありました。親モデルからhas_manyで関連付けたモデルのレコードをfields_forで一括登録しようとする処理です。 ソースは↓な感じ。 [controller] def new @order_info = OrderInfo.new end def create @order_info = OrderInfo.new(order_info_params) respond_to do |format| if @order_info.save format.html
Google+ボタン はてなブックマークボタン 更新日時: 2013年10月24日(木) 作成日時: 2013年02月06日(水) 前の記事 / 次の記事 Railsでモデルを保存する時に、 accepts_nested_attributes_for を使ってアソシエーション先のモデルも含めて一発で保存する。 目次 やりたいこと やること 付随する機能 参考ページ やりたいこと 例えば、次のようなモデルがあって、 class Book < ActiveRecord::Base attr_accessible :author_id, :title belongs_to :author end class Author < ActiveRecord::Base attr_accessible :name has_many :books end BookとAuthorを同時に保存したい時、こう書
更新情報: 2013/11/19: 初版公開 2021/01/08: 訳文見直し、追記 こんにちは、hachi8833です。今回は、自分が知りたかった、Active Recordモデルのリファクタリングに関する記事を翻訳いたしました。1年前の記事なのでRails 3が前提ですが、Rails 4以降でも基本的には変わらないと思います。リンクは可能なものについては日本語のものに置き換えています。 なお、ここでご紹介したオブジェクトは、app以下にそれぞれ以下のようにフォルダを追加してそこに配置します。 注記: 以下は使われそうなフォルダを列挙しただけであり、実際にはこの一部しか使いません。 Value Object Service Object Form Object Query Object View Object Policy Object Decorator ⚓ 肥大化したActive
Google+ボタン はてなブックマークボタン 更新日時: 2014年07月14日(月) 作成日時: 2013年07月17日(水) 前の記事 / 次の記事 似たようなモデルを扱っているからまとめてみたい気がするんだけど、 単一テーブル継承(STI)だとうまくいかなくて、 かといってガチでモデルを継承するとかいう危なそうなことはやりたくなくて っていう時はポリモーフィックアソシエーションで上手くいくかも知れない。 参考ページ 【Rails】ActiveRecord:単一テーブル継承(sti)とポリモーフィック関連を未だにぱっと思い出せないのでまとめ。 [Rails] 実用ポリモーフィック関連(基礎編) 何が出来るのか? 参考ページで全て解決なんだけど、一応自分でもまとめ。 例えば、「日記」と「本」と「お店」があって、それぞれに日記の感想として、 本を読んだ感想として、お店に行った感想としてコ
ActiveRecordで単一テーブル継承(STI:Single Table Inheritance)とポリモーフィック関連という2つの便利なモデルの持ち方?関係性?があるのですが、恥ずかしながらいつも混同してしまいます… 多分頭の中では両方とも「似たモデルをまとめる」みたいなぼんやりした認識してるので混ざってしまっているようで… すごい今更ですが ちょっと自分なりにまとめてみようと思います。 単一テーブル継承(STI:Single Table Inheritance) 同じような機能(メソッド)を持つActiveRecordモデルクラスが2つ存在するので、 継承を使って実装しようとした場合。 例として 「Information」モデルを継承した「Warning」クラスと「Notice」クラスを作成するとします。 (例としておかしかったらごめんなさい…) 単純に実装すると、各モデルに対しD
追記: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というメソッドが使えるようになっています。これは、指定
インフラストラクチャー部の成田(@mirakui)です。 Rails の OR マッパーである ActiveRecord ですが、みなさんどのように運用していますか? ActiveRecord を使うと、 SQL を直接扱うことなく、抽象化された表現で RDB にアクセスできるので、アプリケーションの開発効率という観点ではメリットが大きいです。 一方で、 ActiveRecord が駆使されているアプリケーションをサーバに配置してプロダクションとして運用する立場からすると、いくつかの問題に突き当たります。 まずはクックパッド本体アプリケーションにおける、最新の rake stats をご覧ください。 +----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC
7 Patterns to Refactor Fat ActiveRecord Models という記事があり、読もう読もうと思いつつ1年くらい経ってしまった。 ようやく読んだので理解した内容を書いておく。 コード例は元記事のもの。 Rails で thin controller, fat model を心がけていると、model がマジで激太りしてヤバくなる。 実際に自分が仕事で書いている rails アプリも激太りしててヤバい。 この blog の筆者が作っている CodeClimate で C 判定をもらう程度には肥満体型になっている。 Mixinに抜き出さない! Model が太ってきた時に考えるのは ActiveSupport::Concern を使って感心事を抜き出して、Mixin にすることだと思う。 実際に手元のアプリでも models/concerns/ なんていうディレ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く