このエントリーをはてなブックマークに追加

Rails3にBackbone.jsを導入する

最近Backbone.jsを触っています。Backbone.jsをRailsで使うなら、パッケージで導入してしまうのが一番簡単だと思います。

Gemfileにrails-backboneを追加してbundle install

Backbone.jsを組み込みます。

app/assets/javascript/application.js は以下のように変更されます。

この下から2行目、ファイルでは app/assets/javascript/backbone/app.js.coffee が各モデル・ビュー・テンプレートなどを読み込むようになっています(ファイル名はRailsアプリと同じ名前になります)

ところで、rails-backboneのお作法は(scaffoldで生成されたコードをみる限り)モデル・ビュー・ルーターをディレクトリに分けて管理するようです。そしてその構造がそのまま名前空間になります。

例えばUserモデルなら app/assets/javascript/backbone/models/user.js.coffee にファイルを作り、下記のようなコードを書いていきます。

アプリ名が長いと若干タイプが面倒かなーって印象ですが、まぁ app/* と同じ感覚で作れるのでRails慣れしてる人は違和感なく使えそうです。

このエントリーをはてなブックマークに追加

Rails3 + unicornからRabbitMQに接続するには

ruby-amqpはEventMachineに依存しているので、unicornからRabbitMQに接続する場合は少し手間がかかります。EventMachineで実装されているThinなどはそのまま動くようですが。。。

下記コードをconfig/unicorn.rbに追記します。

config/amqp.ymlを用意します。

開発環境(WebRickなど)からもRabbitMQに接続出来るようにします。

コントローラからパブリッシュする場合は下記のようにします。

このエントリーをはてなブックマークに追加

Ruby 1.9.2 + Rails3でテストカバレッジを取るにはSimpleCovが良さそう

Ruby (Rails) でテストカバレッジといえば Rcov ですね。

しかし Rcov は Ruby 1.9.x に非対応なので Ruby 1.9.2 + Rails3 な環境で開発をしている方は SimpleCov を使うと幸せになれます。名前にSimpleと付いていますが高機能で見た目も綺麗です。

また simplecov-rcov を併用すれば Rcov のフォーマットで出力することも出来るので、Jenkins などのCIツールとの連携も難しくないはずです。

使い方

Gemfileに下記コードを追加してbundle installします。

spec/spec_helper.rb の最上位に下記コードを追記します。

準備完了。rake specを実行すれば coverage ディレクトリの中に結果が生成されています。

そういえば…

以前 cover_me紹介記事を書いた事を今更思い出しました。こちらのライブラリも引き続き開発が続けられているようです。

このエントリーをはてなブックマークに追加

has_one関連でaccepts_nested_attributes_for / fields_forを使う

先日、has_one関連でaccepts_nested_attributesを使ってフォームを作ろうとしたら、ネスト先のフィールドが画面に出てこなくて小一時間ハマりました。そういえば以前も同じ事で悩んだような気がしたのでブログに残しておきます。


UserモデルとProfileモデルが存在し、1対1の関連で結ばれているよくある構成を例にします。ユーザー登録を行うフォームで同時にプロフィールも登録出来るようにします。

Userモデル

Profileモデル

_form.html.hamlビュー

上のコードのように fields_for の第二引数で@user.profileが存在するかチェックし、存在しない場合はProfileのインスタンスを新規に作成します。こうすることで new, edit 両方に対応することが出来ます。

このエントリーをはてなブックマークに追加

Rails v3.0.xからv3.1.0にアップグレードした時のメモ

Rails v3.1.0が出たのでv3.0.10で開発しているプロジェクトの対応を行いました。その時のメモを残しておきます。

といっても、このRailsプロジェクトはJSONを返すだけの単純なREST APIでしたので修正箇所は少なかったです。あまり参考にならないかもしれません。。。

Gemfileを開き、Rails, Rake, mysql2のバージョンを上げます。

おなじみBundlerでgemを更新します。

問題なく動作するかテストを走らせてみます。

……どうやらdebug_rjs というメソッドが無くなったようです。config/environments/development.rbから該当の行を削除します。

以上を修正するだけで対応することが出来ました。色々と書き直しが発生しなくて一安心です。