如何将代码作为对象的字符串获取?

时间:2017-12-07 01:27:05

标签: ruby

我试图做一些元编程,我想知道如何获取传递给方法的对象(或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>行的内容。

1 个答案:

答案 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"