我有以下语句,虽然它使用 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 的方法?
我有以下语句,虽然它使用 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 的方法?
改用Object#send
,在你固定资源名称后:http ://ruby-doc.org/core-1.9.3/Object.html#method-i-send
如果我理解正确,您正在尝试从字符串 'Product' 转到常量Product
,因此您可以使用
Object.const_get(resource_name)
如果您使用的是 Rails,您还可以使用constantize
which 具有理解以下内容的优势Module::SomeClass