2009-03-30 12:14 :
Railsでフォルダ(モジュール)下に配置したモデルのロードに失敗することがある

Railsでクラス数が増えてくるとフォルダ分けしたくなることがあります。その場合、Javaのパッケージと同じように、モデルをフォルダ分けして、モジュール下に宣言してやることになります。以下のような感じです。
class ModuleName::ModelName < ActiveRecord::Base end
ところが、belongs_toとかhas_manyとかの関連を解決する際に、以下のようなエラーが出て手がつけられなくなることがあります。悪名高きActiveSupportの「XXX is not missing constant YYY」ですね。
ArgumentError in Hogehoge/Fugafuga#nanika ModuleName is not missing constant ModelName <<中略>> c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:253:in `load_missing_constant' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:468:in `const_missing' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:486:in `send' c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib/active_support/dependencies.rb:486:in `const_missing' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/base.rb:1912:in `compute_type' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/reflection.rb:133:in `send' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/reflection.rb:133:in `klass' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/associations/ belongs_to_association.rb:44:in `find_target' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/associations/ association_proxy.rb:192:in `load_target' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/associations/ association_proxy.rb:99:in `reload' c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/associations.rb:1092:in `image' <<中略>>
Railsのソースコードを追った感じでは、load_missing_constantメソッドの中でModuleName.const_defined?(ModelName)していて、これtrueを返すと、上記の例外を投げます。嫌なにおいがぷんぷんとするのですが、あまり深追いしないようにします。
で、この現象、モデルやコントローラの中で、「ModelName」で呼び出していると発生するのですが、「ModuleName::ModelName」と書いてやると発生しなくなります。必ず再現するわけでもないようで、結構長いこと私はこの現象が発生していることに気づきませんでした。
結構はまったのが、本現象は、単一テーブル継承でtypeにモジュール名無しのモデル名を書き込んでしまっても発生することです。
本現象はRails2.1.2で発生していますが2.3.2でも発生しているっぽいです。この問題で2時間くらい悩んでしまった。。。
Posted by あかさた(編集)
2009-03-23 11:33 :
SubdomainFuとRestfulAuthenticationを組み合わせて使う

RailsでSubdomainFuとRestfulAuthenticationを組み合わせて使おうとしたら、ログイン後のリダイレクトの処理(redirect_back_or_default)でサブドメインが渡らないことに気がつきました。(あたりまえですが・・・。)
とりあえずの処置として、AuthenticatedSystemのstore_locationを書き直すことにしました。RestfulAuthenticationでは、ユーザーが認証が必要なページにアクセスする際にstore_locationを呼び出して、ログイン処理後のリダイレクト先を保存するので、このタイミングにサブドメインも(というかURL丸ごと)保存することにしました。
def store_location session[:return_to] = request.protocol + request.env['HTTP_HOST'] + request.request_uri end def redirect_back_or_default(default) redirect_to(session[:return_to] || default) session[:return_to] = nil end
意外とサブドメインを扱うのは面倒です。。。
Posted by あかさた(編集)
2008-05-21 13:56 :
Rails レシピブックができあがったらしい

takahashim さんと moro さんが執筆されていた「Railsレシピブック 183の技」が
Rails使いにとっては待望の一冊となるこの本は、レシピというだけあって「これをやりたいときにはどう書けばいいか」に特化した本と言えます。
ネットで簡単なチュートリアルを試した Rails ユーザーが、仕事などで実際のアプリを書くようになったとき、やりたいことに対して Rails もしくは Rails 周辺のプラグインなどがどのような機能を提供してくれるのか調べにくいと感じることがあります。そういうときに、このレシピ本を開くとある程度の疑問を解消してくれるもしくはそのきっかけを与えてくれる、そういう本です。
ある程度 Rails を使ったことのある人でも、一通り目を通すと「あ、こんな書き方あったんだ」とか「忘れてた、こういう書き方すれば良かったんだ」という発見が結構あると思います。執筆者が Ruby/Rails に深く知っていることもそうですが、Ruby/Rails コミュニティが積極的に内容をレビューしたこともあり、良い品質の本に仕上がっています。
# 私もレビューに参加しましたが、あまりお手伝いできず。。。スンマセン。
Rails を使っている/これから使う予定がある人は、ぜひ本書を手に取ってみることをお薦めします。
Posted by あかさた(編集)
2008-02-08 14:39 :
Rails 勉強会用ポジションペーパ(第27回)

Rails勉強会@東京第27回のポジションペーパ。
ポジションペーパ(png)
そろそろ、パワポベースはやめにして、普通にテキストにしよう。。。
Posted by あかさた(編集)
2008-01-21 23:51 :
Rails 勉強会@東京第26回に行ってきた

Rails勉強会@東京第26回に行ってきました。今回は珍しく前日にアルコールを入れていなかったので、割と詳細なメモを取ることができました^^;。そのメモをもとに勉強会の模様をお伝えしたいと思います。
続きを読む
Posted by あかさた(編集)
2008-01-21 17:28 :
Kodougu を Rails 1.2 から Rails 2.0 に挙げた際のログを残しておく

Kodougu の Rails を最新のバージョンに上げたので、その際のログを残しておきます。Rails にそれほど激しい変更がなかったらしいということと、Kodougu 自身がそれほど Rails を使い込んでいないという理由から、かなり行き当たりばったりで対処してみました。
※ それでも、一度 1.2.6 にしてから 2.0.x へ上げるという作業をしています。1.2.6 では、2.0 に向けて Depreciated な API に関する警告を出してくれるので、1.2.6 上で機能を動かしながら 2.0 対応を進めるということができます。
続きを読む
Posted by あかさた(編集)
2008-01-15 12:09 :
「Ruby on Rails によるシステム開発をモデリングで効率的に行う」連載記事を書いた

最近、八角研究所で技術記事を書いているのですが、そこで、Ruby on Rails の開発を潤滑に進めるために、モデリングを含めた開発プロセスを架空の事例に適用して紹介した連載記事を執筆しました。
続きを読む
Posted by あかさた(編集)
2008-01-12 18:39 :
RSpec をインストールしてみた

Kodougu のテストを RSpec で書いてみようと思ったので、RSpec をインストールしてみました。
どうしたわけか、Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)のやり方では,
RSpec on Rails がインストールできなかったので、以下を参考にインストールしてみました。
RSpec-1.1.1: Installation
http://rspec.info/documentation/rails/install.html
ruby script/plugin install http://rspec.rubyforge.org/svn/tags/CURRENT/rspec ruby script/plugin install http://rspec.rubyforge.org/svn/tags/CURRENT/rspec_on_rails
URL が多少変わっていますが、そのせいですかね??? どうも、RubyForge の事情には疎いのでわかりかねます。(--;
そして、こちらの記事のやり方でテストデータを作成して、今テストを書いています。今のところ、RSpec のメリットは全くわからないのですが(オイオイ)、書いていて気持ちいいですね。
Posted by あかさた(編集)
2008-01-12 01:17 :
ひがさんは大変な Ruby/Rails の心配をしていきました

そろろろRailsについて本音を書いてみるかについてです。ひがさんはよほど Ruby/Rails の心配をしてくださっているようなので、Rails ユーザの一人として非常にありがたく思うのと同時に、ひがさんの心配のいくつかは取り除くべきかなと感じました。
続きを読む
Posted by あかさた(編集)
2008-01-11 15:35 :
Rails 勉強会用ポジションペーパ(第26回)

Rails勉強会@東京第26回のポジションペーパ。とりあえず書きましたが、PowerPoint で png 出力するとなぜか汚いです。なんでだろう・・・。
ポジションペーパ(png)
Posted by あかさた(編集)

2008-01-22 13:17 : かくたに
プロトコルがsvnになっているのままなのは不親切でした。httpのほうが適切ですね。修正をお願いしておきます。ご指摘ありがとうございます。
2008-01-22 14:48 : あかさた
迅速な対応ありがとうございます!
前の Rails 勉強会でも RSpec がセッションになりましたし、RSpec が広がっていくといいですね。