Ruby on Rails がメソッド内の定数を破損しているようです
概要
私の定数は変更されているようですが、どうすれば変更できますか。
環境はRails 7.0.7.2です rbenv経由のRuby 3.1.2p20
考慮する
module ArrayTestMethods
PROFILE_PARAMS = [["id","id"],["customer_id","contactId"],["channelId","channelId"],["identifierId","identifierId"],["platform","platform"],["identifier","identifier"],["created","createdAt"],["updated","updatedAt"]].freeze
def showme
params = {"id"=>"d1", "contactId"=>"contact1", "channelId"=>"bbc2", "identifierId"=>"ident2", "platform"=>"events", "inheritedFrom"=>"", "createdAt"=>"2023-10-19T17:03:58Z", "updatedAt"=>"2023-10-19T17:03:58Z", "identifier"=>"353860872561"}
x = model_from_hash(params, PROFILE_PARAMS)
pp x
end
def json_walker(params, *args)
args.each do | arg|
params = params[arg]
return nil if params.nil?
end
return params
end
def model_from_hash(params, array_map, debug = false)
#im doing the below as a test i've tried
# array = array_map.clone same result
# i've also tried using array_map on its own
array = Array.new
array << array_map
attributes_array = array[0]
puts "array map before"
pp attributes_array
attr_hash = Hash.new
attributes_array.each do | arr|
model_attribute = arr[0]
arr.shift
data = json_walker(params, *arr)
puts "arr0 - #{model_attribute} data - #{data}" if debug
end
puts "array map after "
pp array_map
return array_map
end
module_function :json_walker, :model_from_hash, :showme
これを一度実行すると、ArrayTestMethods::showme が得られます。
2 回目に実行すると、次の結果が得られます
きっと結果はこうなるはず
解決策
arr.shift は配列を変更します。
したがって、各ブロック内の配列を変更する代わりに、元の配列を変更せずに、ある変数から別の変数に値を渡すことができます。
変えてみようと思います
attributes_array.each do | arr|
model_attribute = arr[0]
arr.shift
data = json_walker(params, *arr)
puts "arr0 - #{model_attribute} data - #{data}" if debug
end
に
attributes_array.each do | arr|
model_attribute = arr[0] # first element
data = json_walker(params, arr[1..-1]) # elements from second position to the end
puts "arr0 - #{model_attribute} data - #{data}" if debug
end