タグ

ブックマーク / qiita.com/metheglin (2)

  • has_manyをeager_load/includesするときの注意点 - Qiita

    eager_loadはJOINしてキャッシュもしてくれるActiveRecordのメソッドだが、この仕様を正しくイメージできてなかったのではまった. has_manyに対してIN句検索したときに一部のhas_manyデータのみがキャッシュされて意図しない結果となった. joinsではキャッシュされないためこの問題は起こらないが、当然キャッシュされないので後から追加クエリが発行される. includesは条件によってeager_loadと同じ動きをするため今回の用途だと同じ問題が発生する. ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い 再現 超簡単なhas_many関連を作成する. class User < ActiveRecord::Base has_many :roles end class Role < ActiveRecord::

    has_manyをeager_load/includesするときの注意点 - Qiita
    takaesu
    takaesu 2015/10/16
    joinsを使ってN+1を回避する
  • Rails4 DB連携なしモデルでバリデーション機能を使う - Qiita

    Goal RailsでActiveRecord機能モデルを使うときは、必ずバックエンドでDBと紐付いていなければならない 今回は、たとえばCSVファイルのCRUDなどRails4でDB連携しないモデルを作成したい RailsActiveModelが搭載するvalidation機能・callback機能を使って、モデル呼び出し側が意識することなく自動でオブジェクトをチェックするエコシステムをつくりたい Milestone rails generate modelを実行するとDBと関連付けられてしまうため、これは使わない ActiveRecordを継承したモデルが作成されてしまう、migrationファイルが作成されてしまう モデルクラスを新規作成し、クラスにActiveModelモジュールをMixInさせることで、必要な機能だけをクラスに取り込むことができる(Rails3とRails4では

    Rails4 DB連携なしモデルでバリデーション機能を使う - Qiita
    takaesu
    takaesu 2014/04/01
    ActiveModelでコールバック関連の処理を実装する
  • 1