【问题标题】:Help with ruby and def respond_to?(method,*args, &block) in library帮助库中的 ruby​​ 和 def respond_to?(method,*args, &block)
【发布时间】:2011-08-10 15:07:08
【问题描述】:

我有一个 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/

更新:这也返回空白。

【问题讨论】:

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


    【解决方案1】:

    你的问题很不清楚。 respond_to? 方法与您的对象 id 问题有什么关系?

    猜测实际上你想覆盖method_missing,因为现在你没有调用respond_to?,或者它没有在你的示例中显示。

    如果你没有定义这样的方法,调用image.s_245_245会触发method_missing(在image对象中)你使用的参数respond_to?

    有一条规则,如果你使用method_missing来处理一些调用,那么你应该修改respond_to?,并使其在被要求处理的方法时返回true method_missing.

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

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

    这只是一个旁注,因为我想如果你开始尝试使用method_missing 而不是respond_to?,你就会知道你想要哪个。

    【讨论】:

    • 抱歉问题不清楚,但是是的,我想要的是 method_missing。
    猜你喜欢
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2011-08-07
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    相关资源
    最近更新 更多