「ダックタイピング」の意味を誤解していないことを願っていますが、私が読んだことから、オブジェクトがどのタイプ/クラスであるかではなく、メソッドにどのように応答するかに基づいてコードを記述する必要があることを意味します。
コードは次のとおりです。
def convert_hash(hash)
if hash.keys.all? { |k| k.is_a?(Integer) }
return hash
elsif hash.keys.all? { |k| k.is_a?(Property) }
new_hash = {}
hash.each_pair {|k,v| new_hash[k.id] = v}
return new_hash
else
raise "Custom attribute keys should be ID's or Property objects"
end
end
私が望むのは、キーが ActiveRecord オブジェクトの ID を表す整数であるハッシュになるようにすることです。all?
IDを取得する必要があるかどうかを判断するために、ハッシュキーを2回反復処理する必要があるのは特に好きではありません。
もちろん、このコードを改善するための他の提案も受け入れます:)