我试图做一些元编程,我想知道如何获取传递给方法的对象(或ActiveRecord关系)的代码。理想情况下,它将返回ruby代码的字符串。例如:
class Bike
end
# Ideal response
get_code_for(Bike.new)
#=> 'Bike.new'
get_code_for(User.where(id: 123))
#=> 'User.where(id: 123)'
get_code_for(Article.published)
#=> 'Article.published'
这适用于数字和字符串,但是,对于类和关系,参数将被评估并返回#<Bike:0x000056338e33fca8>
行的内容。
答案 0 :(得分:0)
如果你想要一个指向方法的指针,你可以用Class#method
得到它。这会为您提供一个Method
实例,其中包含#receiver
和#name
等方法。
m = Bike.method(:new)
m.receiver # => Bike
m.name # => :new
m.call # => #<Bike:0x000000017a7078>
format("%s.%s", m.receiver, m.name) # => "Bike.new"