Ruby中的多条件语句执行

时间:2015-01-17 07:42:44

标签: ruby ruby-on-rails-3.2

如果以下陈述的内容不是零并且已提交,则需要对其进行评估。接收端不接受零值。

  :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 '}'

如何克服这个问题?

2 个答案:

答案 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]
}