我目前正在尝试将电话号码解析为PDF格式。我将电话号码分为三个部分:区号,前3个数字和后4个数字。
DICTIONARY = {
'TELEPHONE NUMBER area code 1'=> '66563943', #Primary Phone - Area code (000)
'TELEPHONE NUMBER first 3 1' => '66563943', #Primary Phone - (000) 000
'TELEPHONE NUMBER Last 4 1' => '66563943', #Primary Phone - (000) 000-0000
}
上面是我必须解析电话号码的字段。
{
"field": "66563943",
"value": "(201) 785-9896"
},
从上面的片段中可以看到,我必须解析该电话号码,以将其放入PDF表单字段中。我成功地将数字分为代码,前3个和后4个。
elsif phone_number?(field_data[:field])
parse_phone_number(field_data[:value])
@phone_number_sections.each do |section|
fill(field, section)
field.next!
end
else
field_data
如下:
[10] pry(#<PdfScrie>)> field_dataield_data
=> {:field=>"66563943", :value=>"(201) 785-9896"}
但是,字段在迭代时不会移动。
1] pry(#<PdfScrie>)> field
=> "TELEPHONE NUMBER area code 2"
[2] pry(#<PdfScrie>)> section> section
=> "201"
[3] pry(#<PdfScrie>)> field>)> field
=> "TELEPHONE NUMBER area code 2"
[4] pry(#<PdfScrie>)> section> section
=> "201"
[7] pry(#<PdfScrie>)> @phone_number_sections_sections
=> ["201", "785", "9896"]
[8] pry(#<PdfScrie>)> field>)> field
=> "TELEPHONE NUMBER area code 2"
[9] pry(#<PdfScrie>)> section> section
=> "201"
[10] pry(#<PdfScrie>)> field_dataield_data
=> {:field=>"66563943", :value=>"(201) 785-9896"}
但是,当我转到表格时,电话号码只会抓住@phone_number_sections
数组中的第一个元素。
PHONE_NUMBER_FIELD_IDS = [
TELEPHONE_NUMBER_1_id = "66563943"
].freeze
我使用电话ID来验证该字段是否需要解析:
def parse_phone_number(phone_number)
@phone_number_sections = phone_number.gsub(/\D+/, "").match(/(...)(...)(....)/).captures
end
def fill_form_with_data(field, field_data)
if address_field?(field_data[:field])
break_address_into_state_city_zipcode(field_data[:value], field)
elsif phone_number?(field_data[:field])
parse_phone_number(field_data[:value])
@phone_number_sections.each do |section|
fill(field, section)
field.next!
binding.pry
end
else
fill(field, field_data[:value])
end
为什么section
不移动到数组中的下一个元素?
def fill_out
form_fields.each do |field|
id = DICTIONARY[field]
@user_submission_data
.select {|fd| fd[:field] == id}
.each {|field_data| fill_form_with_data(field, field_data) }
end
end
如果删除field.next!
,则只有数组中的最后一个元素填充到PDF表单字段中,因为该字段不会移到DICTIONARY
中的下一个元素,如下图所示。
答案 0 :(得分:2)
将您的fill_out
方法写为:
def fill_out
form_fields.each do |field|
id = DICTIONARY[field]
@user_submission_data
.select {|fd| fd[:field] == id}
.each do |field_data|
if address_field?(field_data[:field])
break_address_into_state_city_zipcode(field_data[:value], field)
elsif phone_number?(field_data[:field])
parse_phone_number(field_data[:value])
fill(field, @phone_number_sections.shift)
else
fill(field, field_data[:value])
end
end
end
end
不需要fill_form_with_data
方法。当前代码中的问题是@phone_number_sections
数组会迭代直到每个电话字段的最后一个值。因此,这些字段将获取@phone_number_sections
数组的最后一个值。但是上面的代码可以将其修复为IMO。