如果满足多个条件,我试图从下拉列表中替换一个值。我试图用gsub方法做到这一点。具有条件的ruby gsub
场景1:如果当前选定的值是9.3.9然后值9.4.1不应该可用
场景2: 如果当前选择的值为9.3.10然后值9.4.1和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
你如何存储版本列表和选定的版本?需要看一些代码来提供答案;例如,gsub是一个字符串操作符,但我希望你实际上正在检查一个数组 –
这看起来像一个JavaScript问题。你确定你需要Ruby来做到这一点吗? – tadman
您也可能想要将这些“版本化”排序,而不是按默认排序顺序排序:'sort_by {| v | v.split.collect(&:to_i)}' – tadman