[英]String literal in condition
我正在尝试使用CSV文件格式将大量数据插入表格中的特定列。 我的代码如下:
代码 :
def maritalstatus_migration
filename = "#{RAILS_ROOT}/config/MaritalStatus_Data_Migration_240114.csv"
file=File.new(filename,"r")
while (line = file.gets)
columns = line.split("$")
employee = Employee.find_by_employeeid(columns[0].to_s.chomp.strip)
personnel = Personnel.find_by_extid(columns[0].to_s.chomp.strip)
if employee && personnel
sheet_marital_status = columns[1].to_s.chomp.strip
if sheet_marital_status == 'Married' or 'MARRIED'
personnel.marital_status = 'Married'
elsif sheet_marital_status == 'Unmarried' or 'UNMARRIED'
personnel.marital_status = 'Unmarried'
elsif sheet.marital_status ='Unknown' or 'UNKNOWN'
personnel.marital_status = 'Unknown'
else
personnel.marital_status = columns[1].to_s.chomp.strip
end
end
end
end
当我在Console中运行我的方法时,我得到一个警告说:
String literal in condition
指向行personnel.marital_status = columns[1].to_s.chomp.strip
,我做错了什么。任何建议将不胜感激。
对代码进行更正,尤其是在使用OR条件的情况下,应将警告静音
if ['Married','MARRIED'].include?(sheet_marital_status)
personnel.marital_status = 'Married'
elsif ['Unmarried','UNMARRIED'].include?(sheet_marital_status)
personnel.marital_status = 'Unmarried'
elsif ['Unknown','UNKNOWN'].include?(sheet_marital_status)
personnel.marital_status = 'Unknown'
else
personnel.marital_status = columns[1].to_s.chomp.strip
end
因为如果你使用'XXX' or 'xxx'
,它总是评估为'XXX'。 这意味着您只将sheet_marital_status与第一个字符串进行比较。 这可能是编译器警告指示的内容。 你最好使用Include。
lemme也知道你的发现。
我会使用一个case
陈述:
personnel.marital_status = case columns[1].to_s.chomp.strip
when 'Married', 'MARRIED'
'Married'
when 'Unmarried', 'UNMARRIED'
'Unmarried'
when 'Unknown', 'UNKNOWN'
'Unknown'
else
columns[1].to_s.chomp.strip
end
当你传递String
类的实例作为if
运算符的条件if
,例如x or y
,其中x
是布尔值 (正确), y
是String
(不正确), String literal in condition
警告中的String literal in condition
就会被修改。 让我们看看导致警告的条件的行为:
if false or "ww12"
p 1
end
# warning: string literal in condition
1
=> 1
如您所见, 字符串文字条件始终计算为true
。 因此,对于大多数情况,它可以被视为语法错误。
为了修复它,只需将String
转换为boolean ,就像x == 'string'
。 对于您的代码,您将获得:
if sheet_marital_status == 'Married' or sheet_marital_status == 'MARRIED'
...
end
或者通过优化:
if sheet_marital_status =~ /^married$/i
...
end
注意:对于您的情况,最好使用case/when
语句,而不是if-elsif-else
语句,因为您在树中具有同源条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.