6

hashMailChimpAPIで新しいサブスクライバーを作成するためのキーと値のペアを含むルビーを使用しています。

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

キーに条件式を使用すると、適度に読みやすい構文が得られ、ハッシュから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 に答える