2016-05-14 13 views
-2

複数の条件が満たされている場合は、値をドロップダウンから置き換えようとしています。私はgsubメソッドでこれをしようとしています。条件付きルビーgsub

enter image description here

シナリオ1:現在選択された値が9.3.9である場合、値9.4.1が利用可能であるべきではないが、シナリオ2は

:現在選択された値は、その値9.4.1 9.3.10ある 場合9.4.4はご利用いただけません。

ご迷惑をおかけして申し訳ございません。私のRDSインスタンスを取得する方法は以下の通りです。私はすでにgsubを使って、使用されているバージョンが9.3かどうかを確認し、9.4へのアップグレードを防ぎます。上記のシナリオに変更したいと思います。

def available_engine_versions(instance) 
     if instance.engine == RdsGeneric::RDS_TYPE_MYSQL 
     # This custom override for certain MySQL cases suppresses the option to upgrade to 5.6 from 5.5. 
     # Amazon cannot do direct updates from MySQL 5.5 to MySQL 5.6 for DBs created before 4/23/2014. 
     # instance.instance.created_at -> Uses Amazon's date of creation, not the one stored by ActiveRecord 
     if instance.nil? || instance.engine_version.start_with?('5.6.') || instance.instance.nil? || instance.instance.created_at >= Time.parse('2014-04-23') 
      RdsConfiguration::rds_configurations[RdsGeneric::RDS_TYPE_MYSQL][:engine_versions] 
     else 
      RdsConfiguration::rds_configurations[RdsGeneric::RDS_TYPE_MYSQL][:engine_versions].select{ |type| type.to_f <= 5.5 } 
     end 
     elsif instance.engine == RdsGeneric::RDS_TYPE_POSTGRES 
     RdsConfiguration::rds_configurations[RdsGeneric::RDS_TYPE_POSTGRES][:engine_versions].select{ |type| type.gsub(/(\d+\.\d+).*?$/,"\\1") == instance.engine_version.gsub(/(\d+\.\d+).*?$/,"\\1") } # no upgrades from e.g. 9.3.x to 9.4.y 
     else 
     RdsConfiguration::rds_configurations[instance.engine][:engine_versions] 
     end 
    end 
+1

バージョンのリストと選択したバージョンをどのように保存していますか?答えを提供するためにいくつかのコードを見る必要があります。たとえば、gsubは文字列演算子ですが、実際に配列をチェックしていると思います。 –

+0

これはJavaScriptの問題のようです。これを行うにはRubyが必要ですか? – tadman

+1

また、デフォルトのソート順ではなく、 "バージョン管理的に"ソートしたいと思うかもしれません: 'sort_by {| v | v.split.collect(&:to_i)} ' – tadman

答えて

1

私はこれがうまくいくと信じて:私はrejectselectを変更

selected_value = instance.engine_version.gsub(/(\d+\.\d+\.\d+).*?$/,"\\1") 
RdsConfiguration::rds_configurations[RdsGeneric::RDS_TYPE_POSTGRES][:engine_versions].reject do |type| 
    dropdown_entry = type.gsub(/(\d+\.\d+\.\d+).*?$/,"\\1") 

    (dropdown_entry == "9.4.1" && selected_value == "9.3.9") || (["9.4.1", "9.4.4"].include?(dropdown_entry) && selected_value == "9.3.10") 
end 

注意してください。

データがどのようなものか分かっていると、多くの助けになります。今はgsubが必要ないかもしれません。

+0

データは、aws APIを介して取得されたバージョン番号に過ぎず、フォーマットは一貫しています。 9.3.xなど。9.3バージョンが現在使用されている場合、エンジンオプションの新しいバージョン(9.4.xなど)を非表示にするためにgsubが使用されました。可能であれば、私はまだデータフォーマットにマッチしたいと思います。しかし、あなたは正しいです、多分gsubは過剰です。私はあなたの提案を聞くのが大好きです。 – user1576738

+0

私は単純にgsubを削除して、まっすぐな比較をすることができますが、フォーマットが一貫していることを確認したいと思います。 – user1576738

+0

こちらのご提案ありがとうございました。 ;-) – user1576738