如果以下陈述的内容不是零并且已提交,则需要对其进行评估。接收端不接受零值。
:customer => {
if !@transaction.name.nil? :first_name => @transaction.nome,
if !@transaction.last_name.nil? :last_name => @transaction.last_name,
if !@transaction.nation_id.nil? :country_name => @transaction.nation.name
},
如果没有条件,则会正确评估简单语句:first_name => @transaction.nome,
,并且括号和逗号的语法是正确的。但是,条件的引入会在nil值的情况下产生空白并生成语法错误 unexpected '}'
。
如何克服这个问题?
答案 0 :(得分:1)
您可以简单地添加值,然后将其过滤掉。将使您免于所有这些检查:
:customer => {
:first_name => @transaction.nome,
:last_name => @transaction.last_name,
:country_name => @transaction.nation.try(:name)
}.reject{ |_, v| v.nil? }
答案 1 :(得分:1)
你可以通过添加一个小lambda
来杀死一些重复customer: {}.tap { |h|
conditional_store = -> key, value { h.store(key, value) unless value.nil? }
conditional_store[:firstName, @transaction.name]
conditional_store[:last_name, @transaction.last_name]
conditional_store[:country_name, @transaction.nation.name]
}