メソッドを文字列として呼び出す方法を知っている人はいますか? 例えば:
case @setting.truck_identification
when "Make"
t.make
when "VIN"
t.VIN
when "Model"
t.model
when "Registration"
t.registration
.to_sym
動作しないようです。
メソッドを文字列として呼び出す方法を知っている人はいますか? 例えば:
case @setting.truck_identification
when "Make"
t.make
when "VIN"
t.VIN
when "Model"
t.model
when "Registration"
t.registration
.to_sym
動作しないようです。
使用.send
:
t.send @setting.truck_identification.downcase
(vin
動作させるには小文字にする必要があります)
を使用したいと思うObject#send
でしょうが、正しい大文字小文字で呼び出す必要があります。例えば:
[1,2,3].send('length')
=> 3
編集:さらに、予期しないバグにつながる悪い習慣のように思われるため、お勧めしませんが、オブジェクトがサポートするメソッドのリストを検索することで、さまざまな大文字と小文字を区別できます。
method = [1,2,3].methods.grep(/LENGth/i).first
[1,2,3].send(method) if method
=> 3
大文字と小文字を区別しない正規表現を使用してすべてのメソッドを検索し、見つかった場合は最初に返されたシンボルをオブジェクトに送信します。
メソッドをグリーピングするのは、最もクリーンな方法ではありません。使うだけ#respond_to?()
method = @setting.truck_identification.downcase
if t.respond_to?(method)
t.send(method)
end
method を使用Object#send
して、メソッド名を文字列として渡すことができます。例えば:
t.send(@setting.truck_identification)
メソッドを使用して、truck_identification を正規化する必要がある場合がありますString#downcase
。