0

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を使用しない、これを行うためのより良い方法はありますか?

4

2 に答える 2

4

Object#sendリソース名を定数化した後、代わりに使用してください: http://ruby-doc.org/core-1.9.3/Object.html#method-i-send

于 2012-07-28T13:37:13.040 に答える
2

私が正しく理解していれば、文字列「Product」から定数に移動しようとしているProductので、次のように使用できます。

Object.const_get(resource_name)

Railsを使用している場合は、次constantizeのようなことを理解できるという利点があるを使用することもできます。Module::SomeClass

于 2012-07-28T13:36:22.443 に答える