2010-01-25 00:34
Rails 2.3系におけるRubyAMFのクラスマッピング
Flex + Railsの構成でwebアプリケーションを作ることを考えているので、購入したFlex on Rails: Building Rich Internet Applications with Adobe Flex 3 and Rails 2 (Developer’s Library)を参考に機能チェックをしています。
FlexとRails間のデータの橋渡しには、同書でも取り上げているRubyAMFを使おうと考えているため、早速”Chapter5 Passing Data with AMF”を読み進めるも、クラスマッピングに関する記述でつまづいたのでその覚え書きをメモしておきます。
利用している環境は以下の通りで、これは”Flex on Rails”の環境より新しいものとなります。
- Ruby: 1.8.7
- Rails: 2.3.5
- RubyAMF: 1.6.5
- Flex SDK: 3.5
まず、Flexから、rubyamf_scaffoldで生成したcontoller上のfind_allを呼び出すことはうまくいきました。
次に、Flex上のVOで以下のようにRemoteClassに対するaliasを設定し、
package flexonrails.examples.vo {
[RemoteClass(alias="Contact")]
[Bindable]
public class Contact {
...
}
}
rubyamf_config.rbで”ClassMappings.assume_types = true”の指定をした後に、この型のデータをFlexからRailsのcontoller上のsaveに渡そうとすると、以下のようなエラーが表示され正常に動作しません。
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
ここやここを見ると、Rails2.3系では解決していない問題のようですね。
取り急ぎ、rubyamf_config.rbで”ClassMappings.assume_types = false”にした上で、
ClassMappings.register(:actionscript => 'Contact', :ruby => 'Contact', :type => 'active_record')
のように手動でマッピングすると、Rails2.3.5でも問題なくsaveが呼び出せました。
Addison-Wesley Professional
売り上げランキング: 26867

RubyAMFについて内容が貧弱でちょっとがっかり
