タグ

rubyとactiverecordに関するasonasのブックマーク (3)

  • 【Ruby】ActiveRecordのAssociationにメソッドを追加する - tanihiro.log

    ActiveRecordのhas_manyとかbelongs_toとかのAssociationはブロックを渡してメソッドを追加することができます。 class User has_many :blogs do # ステータスがopenのものを取得する def open where(status: 'open') end end end こんな感じで、ブロックの内部で関数を定義するとその関数をメソッドチェーンで実行できるようになります。 User.first.blogs.open 複数のモデルで使い回したい処理がある場合は、moduleにまとめてextendオプションでメソッドを追加することも可能です。 module Common def open where(status: 'open') end end class User has_many :blogs, extend: Common

    【Ruby】ActiveRecordのAssociationにメソッドを追加する - tanihiro.log
  • プライマリキーを使った1:1関連でカラム数の多いテーブルを分割する - Hidden in Plain Sight

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

    プライマリキーを使った1:1関連でカラム数の多いテーブルを分割する - Hidden in Plain Sight
  • SinatraからActiveRecord 3を使う(1) マイグレーション - アインシュタインの電話番号

    以前SinatraからDataMapperを使う記事を書いたけど、今回はSinatraのO/Rマッパー部分にActiveRecord 3を使ってみる。ActiveRecord 3自体の使い方については、この記事がすごくわかりやすかった。 Sinatraアプリに必要なファイルを用意する まずは、Sinatraアプリを実行するのに必要な最低限のファイル群(Gemfile, config.ru, app.rb)を作成する。今回は基的にすべてBundler経由で操作するので、システム側にBundlerのgemがインストールされている必要がある。 Gemfile 今回使用するgemはこんな感じ。とりあえずSinatraでActiveRecord 3を使う場合はactiverecordとsinatra-activerecordとsqlite3が必要で、今回使ったバージョンはそれぞれ、3.0.6、0.

    SinatraからActiveRecord 3を使う(1) マイグレーション - アインシュタインの電話番号
  • 1