私はこのコードを持っています...
foo = opt_source.downcase.camelize
"#{foo}".new.start_check
これはクラスとメソッド start_check を呼び出す必要がありますが、未定義のメソッド エラーが発生します
"Abcd":String のメソッド `start_check' が未定義です (Abcd は foo が表すクラスです)
私が間違っていることについて何か提案はありますか?
私はこのコードを持っています...
foo = opt_source.downcase.camelize
"#{foo}".new.start_check
これはクラスとメソッド start_check を呼び出す必要がありますが、未定義のメソッド エラーが発生します
"Abcd":String のメソッド `start_check' が未定義です (Abcd は foo が表すクラスです)
私が間違っていることについて何か提案はありますか?
その文字列を定数に変換する必要があります。歴史的にこれは で行われてeval
いましたが、これはコードにセキュリティ上の問題を引き起こしeval
ます。ユーザーが指定した文字列ではありません。
(Rails で) これを行う正しい方法は、String#constantizeを使用することです。
foo = opt_source.downcase.camelize
foo.constantize.new.start_check
Ruby の場合、Kernel#const_getを使用します。
foo = opt_source.downcase.camelize
Kernel.const_get(foo).new.start_check
メソッドを呼び出す前に、エラーをチェックすることを忘れないでください。
ただeval(foo).new.start_check