2017-12-20 18 views
0

{CREATE_OID_SCHEMA}が= trueかどうかに基づいて、テンプレート変数{USE_EXISTING_SCHEMA}を= trueまたはfalseに設定しようとしています。 {CREATE_OID_SCHEMA}のIF条件を指定するときは、==または=を使用する必要がありますか?ルビー/シェフ:IF ELSEステートメント

case node['fmw']['shortname'] 
     when /oid1/ 
     IS_SECOND_OID_INSTALL = "false" 
     CONFIGURE_OVD_COMPONENT = "true" 
     CREATE_OID_SCHEMA = "true" 
      if CREATE_OID_SCHEMA = "true" then 
      USE_EXISTING_SCHEMA = "false" 
      else USE_EXISTING_SCHEMA = "true" 
     when /oid2/ 
     IS_SECOND_OID_INSTALL = "true" 
     CONFIGURE_OVD_COMPONENT = "false" 
     CREATE_OID_SCHEMA = "false" 
      if CREATE_OID_SCHEMA = "true" then 
      USE_EXISTING_SCHEMA = "false" 
      else USE_EXISTING_SCHEMA = "true" 
    end 

答えて

1

=演算子は、if文でも常に代入演算子です。したがって、

if CREATE_OID_SCHEMA = "true" then 

あなたの文は常にCREATE_OID_SCHEMA定数に文字列"true"を割り当て(およびその時に警告を出力します)。文字列"true"も真実であるため、if文は常に一致します。あなたはおそらく次のようにコードを更新したい今後

、:上記のコードで

case node['fmw']['shortname'] 
when /oid1/ 
    is_second_oid_install = "false" 
    configure_ovd_component = "true" 
    create_oid_schema = "true" 

    if create_oid_schema == "true" 
    use_existing_schema = "false" 
    else 
    use_existing_schema = "true" 
    end 
when /oid2/ 
    is_second_oid_install = "true" 
    configure_ovd_component = "false" 
    create_oid_schema = "false" 

    if create_oid_schema == "true" 
    use_existing_schema = "false" 
    else 
    use_existing_schema = "true" 
    end 
end 

を、私は次の変更を行ってきた:if文で

  • を、私が使用して代入演算子=の代わりに比較演算子==を使用します。
  • Rubyの変数は、常に小文字で始まり、snake_caseを使用する必要があります。大文字で始まる裸の単語は、一度だけ割り当てられるべきRubyの定数とみなされます。
  • 通常、キーワードthenは使用しないでください。代わりに改行を使用してください。さらに、コードを更新する場合

、あなたの代わりに単語を含む文字列の実際のブール値(truefalse)を使用する必要があります。そうすれば、比較を短くして、あなたの意図をよりよく反映させることができます。一般に、falsenilを除くすべての値は、Rubyでは真実です(したがって、if文で一致します)。これにはすべての文字列、数値、正規表現が含まれます。

+0

'if'文は' case'から抽出できます。それから、あなたはただ一つだけ必要です。 –

関連する問題