2007年06月10日

binding

タイトルはbindingですが、直接的に組み込み関数のbindingやBindingクラスの事ではありません。関係はありますが。

最近、書いているAmazon ECSを検索して、ごにょごにょする処理で、ECSのResponseの中(ResponseGroup=Mediumには含まれている)にBindingという項目があります。本の種類(親書、単行本、文庫)などが取得できます。

そこで、ECSの情報をキャッシュするテーブルEcsBookというクラスを作って、binding項目もそのままbindingという項目名としました。

class CreateEcsBooks < ActiveRecord::Migration def self.up create_table :ecs_books do |t| t.column :asin, :string ... t.column :binding, :string ...

そうすると、DBからこのテーブルのレコードを読んでくる際

TypeError (wrong argument type String (expected Proc/Binding)): Y:/usr/local/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/callbacks.rb:335:in `eval' ...

こんなエラーが発生するようになった。

実は、このエラーがこの項目bindingのせいだと気づいたのは、何時間も悩んだあげく、Ruby on Rails: beware of reflection errors [<blink> Tech notes for the greater good]というページをググって見つけたから。

英語は不得意なもので、正確には分らないですが、evalやbindingとかBugとか言っている。
これはActiveRecordがbindingというカラム名を誤認識して、リフレクションがおかしくなるのでは?と気づきました。

項目名bindingをecs_bindingに変えてみたところ見事、問題解決。

しかし分りにくいな。

投稿者 iwazawa : 2007年06月10日 00:26 | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?