2011-08-10 42 views
-2

我有一个宝石处理图像被修改。我想修改它来更新旧图像,但是,我需要能够获取对象ID。帮助红宝石和def respond_to?(方法,*参数,&块)在库

现在它使用下面的代码:

def respond_to?(method,*args, &block) 
puts ("++++METHOD #{method.to_s} ARGS #{args} BLOCK #{block}") 
args.each do |value| 
    puts ("ARGS #{value}") 
end 

,但我不知道如何得到的东西我通过我也不知道如何传递的ID,我已经试过 @asset.image.s_245_245(:asset_id=>@asset.id)没有成功。 Args什么也没有返回。我究竟做错了什么?

更新:我目前正在读http://www.simonecarletti.com/blog/2009/09/inside-ruby-on-rails-extract_options-from-arrays/

更新:这也返回空白。

回答

2

你的问题很不清楚。方法respond_to?如何与您的对象ID问题相关?

猜测,在现实中,你想要覆盖method_missing,因为现在你不叫respond_to?,或者它不是在你的例子所示。

如果尚未定义这样的方法,主叫image.s_245_245将触发method_missing(在image对象)与你用于respond_to?的参数。

有一个规则,它说,如果你使用method_missing处理一些电话,那么你应该修改respond_to?,使当被问及由method_missing处理的方法,它返回true。

至于对象ID,有两种可能性:

  • 在红宝石中的每个对象来响应.object_id(返回的每一个对象的内部标识符)
  • ActiveRecord对象响应.id(这是一个主键入数据库)。

这只是一个侧面说明,因为我想,如果你开始method_missing而不是respond_to?尝试,你会知道你要哪一个。

+0

对不清楚的问题,但是是的,这是我想要的method_missing。 –