如何在内联循环中包含 'next if' 条件

How to include a 'next if' condition in an inline loop

我想在此循环中包含 next if

 = select_tag :type, options_for_select(Products.statuses.keys.map{ |product_type| [I18n.t("product.#{product_type}"), product_type] }, params[:type])

所以我想要这样的东西:

 Products.statuses.keys.map{ |product_type| next if product_type == "clothes", [I18n.t("product.#{product_type}"), product_type] }

有了一个列表,您总是可以根据条件 select or reject 个元素:

Products.statuses
        .keys
        .reject { |product_type| product_type == "clothes" } # <= won't be in list
        .map    { |product_type| [I18n.t("product.#{product_type}"), product_type] }

你几乎是正确的:Ruby中的表达式分隔符是分号;,而不是逗号,,所以应该是

Products.statuses.keys.map{ |product_type| next if product_type == "clothes"; [I18n.t("product.#{product_type}"), product_type] }
#                                                                          ↑↑↑

你也可以反过来这样写:

Products.statuses.keys.map{ |product_type| next [I18n.t("product.#{product_type}"), product_type] unless product_type == "clothes" }