Commit 7f5e7e64 by liyijie

fix: try_chain error for numeric key

parent 1c20b6c1
...@@ -245,11 +245,14 @@ module TalltyImportExport ...@@ -245,11 +245,14 @@ module TalltyImportExport
def try_chain(payload, arr) def try_chain(payload, arr)
arr.reduce(payload) do |r, m| arr.reduce(payload) do |r, m|
if m =~ /^\d+$/ next nil unless r # 如果 r 为 nil,直接返回 nil 结束循环
if m =~ /^\d+$/ && r.is_a?(Array)
index = m.to_i index = m.to_i
r[index] if r.is_a?(Array) || (r.respond_to?(:[]) && index < r.size) # If r is an Array or responds to :[] r[index] if index < r.size # 如果 m 是数字,并且 r 是数组
else else
r.try(m) || r.try(:[], m) || r.try(:[], m.to_sym) # 尝试按哈希键或方法访问
r[m] || r[m.to_sym] || (r.respond_to?(m) ? r.send(m) : nil)
end end
rescue StandardError rescue StandardError
nil nil
...@@ -259,7 +262,7 @@ module TalltyImportExport ...@@ -259,7 +262,7 @@ module TalltyImportExport
def try_method(payload, method, prefix: nil) def try_method(payload, method, prefix: nil)
prefix_arr = prefix.to_s.split(/\./) prefix_arr = prefix.to_s.split(/\./)
arr = method.split('.').flat_map { |m| m.include?('[') ? m.split(/\[\s*|\s*\]/).reject(&:empty?) : m } arr = method.split('.').flat_map { |m| m.include?('[') ? m.split(/\[\s*|\s*\]/).reject(&:empty?) : m }
try_chain payload, prefix_arr + arr try_chain(payload, prefix_arr + arr)
end end
# 根据数据类型 attr_type 进行数据的格式化 # 根据数据类型 attr_type 进行数据的格式化
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment