2017-08-24 13 views
0

添付ファイルを含む多くのパラメータを取り込むメソッドがあります。これは、nullでない場合にのみハッシュに含めることです。両方のケースでハッシュを構築せずにこれを書く方法はありますか? ハッシュの私の現在の配列は、条件が満たされた場合、私はリストにハッシュを追加することができ、このnullでない場合、ハッシュの配列にハッシュを追加しますか?

messagehash = [{ :from => fromhash, 
        :content => contenthash, 
        :to => tohash, 
        :sentDate => datetime.to_i, 
        :isPrivate => false, 
        :sourceInboxes => [sender.email], 
        :subject => subject}] 

のように見えますか?それはこの

messagehash = [{ :from => fromhash, 
       :content => contenthash, 
       :to => tohash, 
       :sentDate => datetime.to_i, 
       :isPrivate => false, 
       :sourceInboxes => [sender.email], 
       :subject => subject, 
       :attachment => attachment_hash}] 
+0

が重複する可能性をルビーハッシュ](https://stackoverflow.com/questions/5750770/conditional-key-value-in-a-ruby-hash) – marcusshep

+0

少し違う、これはハッシュの配列なので、わからなかった –

答えて

2

はい、確認することができますように終わることができますように、このような 何かは多分

if attachment 
    messagehash[0].attachment = attachment_hash 
end 

messagehash[0][:attachment] = attachment_hash if attachment 
1

まず第一に、あなたは、配列を持っているように、それはそうです1つの要素だけでハッシュそれはあなたが望むものか、ハッシュだけなのか?

messagehash = [{ :from => fromhash, 
        :content => contenthash, 
        :to => tohash, 
        :sentDate => datetime.to_i, 
        :isPrivate => false, 
        :sourceInboxes => [sender.email], 
        :subject => subject}] 

あなたは[]そうのように省略した場合だけmessagehash[:from]fromhash にアクセスするためにmessagehash[0][:from]を必要とする:あなたが持っているもの例えば

、あなたが場合

messagehash = {  :from => fromhash, 
        :content => contenthash, 
        :to => tohash, 
        :sentDate => datetime.to_i, 
        :isPrivate => false, 
        :sourceInboxes => [sender.email], 
        :subject => subject} 

つもりハッシュを配列の最初の要素とする場合は、次のようにします。

messagehash[0][:attachment] = attachment_hash if attachment_hash 

が有効です。しかし、私はあなたが本当にちょうど(あなたが上記の言及としてではないハッシュの配列)ハッシュに項目を追加したいと思いますので、このようなものは 時間動作します:で、[条件付きキー/値の

messagehash = { :from => fromhash, 
        :content => contenthash, 
        :to => tohash, 
        :sentDate => datetime.to_i, 
        :isPrivate => false, 
        :sourceInboxes => [sender.email], 
        :subject => subject} 

messagehash[:attachment] = attachment_hash if attachment_hash 
関連する問題