在库中帮助ruby和def respond_to?(方法,* args和& block)

时间:2011-08-10 15:07:08

标签: ruby-on-rails ruby-on-rails-3 gem

我有一个Gem来处理被修改的图像。我想修改它以更新旧图像,但是,我需要能够获得对象id。

现在它使用以下代码:

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

但是我不知道如何从我传入的内容中获取id,也不知道如何传入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/

更新:这也是空白。

1 个答案:

答案 0 :(得分:2)

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

猜测实际上你想要覆盖method_missing,因为现在你没有打电话给respond_to?,或者你的例子中没有显示它。

如果您尚未定义此类方法,则调用image.s_245_245将触发method_missing (在image对象中),其中包含您用于{{1}的参数}}

有一条规则,即如果您使用respond_to?来处理某些调用,那么您应修改method_missing,并在要求时返回true由respond_to?处理的方法。

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

  • ruby​​中的每个对象都响应method_missing(返回每个对象的内部标识符)
  • ActiveRecord对象响应.object_id(这是数据库中的主键)。

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