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
のようなことを理解できるという利点があるを使用することもできます。Module::SomeClass