2011-12-01から1ヶ月間の記事一覧

サービスのコピーを始めた(ないない)

サービスを作ることが目標です。偉大な方から頂いたアドバイスを元に、サービスをまずはコピーしてみます。 Ruby On Railsを少しずつ1ヶ月にわたって触って、なんとなく作れそうな感じになってきたので前に進んでみます。元々、本業が開発プロセスを定義した…

SQLite3でvarchar型に最大文字数制限ないのね

Railsのmigration機能を色々試していて。 class ChangeBooks < ActiveRecord::Migration def self.up change_column :books, :publish, :string, :limit => 15 end def self.down change_column :books, :publish, :string, :limit => 255 end end こんなmig…

Active Record の :include オプション

またまたN+1問題ネタです。前回の記事で、N+1問題を回避するのにJOIN SQLを使うと、返されるオブジェクトの構造がイケていないということを書きました。 自分で、オブジェクトモデルをつくってみたわけですが、ちゃんとしたやり方がありました。多くのO-Rマ…

特異クラスの使い方

前の記事の最後に出したコードで特異クラスを使ってます。 def build_book books = Book.joins('LEFT JOIN reviews ON books.id = reviews.book_id'). select('books.id bid, reviews.id rid, reviews.book_id, reviews.body') res = {} books.each { |rec| …

Active Record で N+1 問題

最近会社でHibernateのN+1問題事例を調べてたんですが、ActiveRecordでも当然のように起こりますね。BOOKSテーブルが、1対NでREVIEWSテーブルと関連を持っています。(BOOKSが1、REVEWSがN)以下のコードでは、BOOKSテーブルを全件検索して、それに関連するR…

インターネットを流れるモノ

便利な時代です。物理的にはインターネットというのは、世界中で瞬時に情報を流すプラットフォームです。しかし、近頃では、そういう無機質な理解を超えたものだということを体感しつつあります。パケットの中に隠れているのは単なる文字や画像ではありませ…

require

Rubyプロセス上で一度requireされたものは、そのあとはrequireしなくてもよいんですね。へえ。 require './hoge.rb' require './sage.rb' hoge = Hoge.new hoge.execute sage = Sage.new sage.execute Sageの中で改めてHogeをrequireしなくても呼び出せます…

ActiveRecordの検索結果に対してコレクション操作を呼び出せるのは何故?

モデルBookから返された@booksで、eachとかsortとか呼べるのはなんでかなと。 @books = Book.find(1) @books = @books.sort { |x, y| x.price y.price } とか @books = Book.select('publish, AVG(price) AS avg_price').group('publish') @books.each do |b…

GP02買った

GP02を購入、EMOBILEを契約しました。 最近、MacBookAirを持ち歩いてて、いつでもネット接続したかったためです。とりあえず速いのは確実。(他のモバイルルータは体感してないけど、少なくともFOMA通信よりは速い)GP02で手持ちのGalaxySの通信も全部賄おう…

Dynamic Finder

Ruby On Rails の Dynamic Finderの仕組みが不思議です。BOOKSテーブルに対応するモデルBookクラスに対して Book.find_by_isbn('1234') とかやると、BOOKSテーブルから値が返されます。 select * from BOOKS where isbn = '1234' と等価です。一方、Bookクラ…

ビューヘルパー form_for

RESTfulな使い方では、一つのフォームパーツを登録と編集で使いまわすことができるのですね。例えば、以下のフォーム記述。 form_for で作ったフォームは、引数にとるモデル@bookの内容によって、送り方が変わる。 @bookが空の場合は、 action="/books", HTT…