6

我正在使用hash包含键/值对的 ruby​​,用于在我的 MailChimp API 中创建新订阅者。

user_information = {
    'fname' => 'hello world',
    'mmerge1' => 'Product X' if user.product_name.present?
}

显然,我得到一个语法错误syntax error, unexpected modifier_if......我基本上只想添加mmerge1基于条件为真的。

4

4 回答 4

11

您不能if在哈希初始化块内使用这种方式。初始化哈希后,您必须有条件地添加新的键/值:

user_information = {
    'fname' => 'hello world',
}

user_information['mmerge1'] = 'Product X' if user.product_name.present?
于 2012-06-11T20:24:14.913 回答
1
user_information = {'fname' => 'hello world'}
user_information.merge!({'mmerge1' => 'Product X'}) if user.product_name.present?
#=> {"fname"=>"hello world", "mmerge1"=>"Product X"}
于 2012-06-11T20:21:43.580 回答
0

如果mmerge1允许为nil空字符串,则可以?:在散列中使用三元运算符:

user_information = {
  'fname' => 'hello world',
  'mmerge1' => user.product_name.present? ? 'Product X' : ''
}
于 2012-06-11T20:32:48.357 回答
0

如果您在键上使用条件表达式,您将获得合理可读的语法,并且最多只需要从 Hash 中删除 1 个元素。

product_name = false
extra_name = false

user_information = {
  'fname' => 'hello world',
  product_name ? :mmerge1 : nil => 'Product X',
  extra_name ? :xmerge1 : nil => 'Extra X'
}
user_information.delete nil

p user_information
于 2014-09-13T14:04:59.527 回答