我有两个简单的模型,clown.rb和funny_hat.rb。
ARes 3.0.7
clown = Clown.new({:funnyHats => [{ :id => "123" },{ :id => "456" }]})
p clown
#<Clown:0x3091b721 @prefix_options={},
@attributes={"funnyHats"=>[#<FunnyHat:0x7fd8623b @prefix_options={}, @attributes={"id"=>"123"}>, #<FunnyHat:0x3f18dc75 @prefix_options={}, @attributes={"id"=>"456"}>]}>
ARes 3.2.1
clown = Clown.new({:funnyHats => [{ :id => "123" },{ :id => "456" }]})
p clown
#<Clown:0x1f38b39c @prefix_options={}, @persisted=false,
@attributes={"funnyHats"=>[#<Clown::FunnyHat:0xbd8632b @prefix_options={}, @persisted=false, @attributes={"id"=>"123"}>, #<Clown::FunnyHat:0x44adf91a @prefix_options={}, @persisted=false, @attributes={"id"=>"456"}>]}>
来自ARes 3.0.7的ARes 3.2.1的嵌套资源似乎有所不同。注意如何在ARes 3.2.1输出中,“Clown :: FunnyHat”节点。我记得当没有声明FunnyHat.rb模型时,这与ARes 3.0.7一起发生。
问题:这是一个可以解决的问题吗?
更新
如果我在ARes 3.2.1中执行以下操作,我会得到不同的结果。
funny_hat = FunnyHat.new()
clown = Clown.new({:funnyHats => [{ :id => "123" },{ :id => "456" }]})
p clown
#<Clown:0x506d043e @prefix_options={}, @persisted=false,
@attributes={"funnyHats"=>[#<FunnyHat:0x70596c33 @prefix_options={}, @persisted=false, @attributes={"id"=>"123"}>, #<FunnyHat:0x381ba0c6 @prefix_options={}, @persisted=false, @attributes={"id"=>"456"}>]}>
这个问题的原因是因为如果节点是“Clown :: FunnyHat”,它不会映射到“FunnyHat”模型,因此实例没有“FunnyHat”的任何实例方法或属性“对象。
另一个临时黑客
将以下内容放在某个初始化步骤或before_filter
中Dir.glob("#{Rails.root}/app/models/*.rb").sort.each { |file| require_dependency file }
感谢https://github.com/rails/rails/issues/5148
我开始认为ActiveResource 3.2.1是ActiveResource 3.0.7的主要回归。