我有以下声明,虽然它使用eval:
但它确实有效 def resource_name
self.class.to_s.match(/(.+)Controller/)[1].singularize
end
def collection
@collection ||= eval "#{resource_name}.all(sort: [[:name, :asc]])"
end
有没有更好的方法来做这个不使用eval?
答案 0 :(得分:4)
在您对资源名称进行实例化后,请使用Object#send
:http://ruby-doc.org/core-1.9.3/Object.html#method-i-send
答案 1 :(得分:2)
如果我理解正确,您尝试从字符串'Product'转到常量Product
,那么您可以使用
Object.const_get(resource_name)
如果您正在使用Rails,您还可以使用constantize
,这样可以了解Module::SomeClass