带条件的ruby-gsub

带条件的ruby-gsub,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,如果满足多个条件,我尝试替换下拉列表中的值。我正试图用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

如果满足多个条件,我尝试替换下拉列表中的值。我正试图用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

我相信这会奏效:

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。

如何存储版本列表和所选版本?需要查看一些代码以提供答案;e、 例如,gsub是一个字符串运算符,但我希望您实际上是在检查数组。这似乎是一个JavaScript问题。您确定需要Ruby来完成这项工作吗?您可能还希望按版本而不是默认排序顺序对这些数组进行排序:sort_by{v|v.split.collect&:to_i}您的问题是什么?如何填充数组?正如@tadman所说,这是一个javascript问题,因为用户选择更改是客户端操作。数据只是通过aws API提取的版本号,因此其格式是一致的,例如9.3.x等。如果9.3版本当前正在使用,则gsub用于隐藏较新版本的9.4.x等引擎选项。如果可能的话,我仍然希望匹配数据格式。但你是对的,也许gsub太过分了。我很想听听你的建议。我知道你可以简单地删除gsub并做一个直接的比较,但我想确保格式至少从我这边是一致的。顺便说一句,谢谢你的建议上面它的工作-