数组创建红宝石内部的if语句

时间:2018-09-24 19:22:46

标签: ruby-on-rails ruby dry

我正在尝试在数组创建中执行if语句

markers_index = Array.new        
@events.each_with_index do |event, index|
...

        markers_index << {
          type: 'Feature',
          geometry: {
            type: 'Point',
            coordinates: [event.longitude, event.latitude]
          },
          properties: {
            markerurl: event.photo.marker.url,
            divclass: marker_class,
            if has_popup
              popupContent: marker_popup
            end
          }
        }
    end

但这会引发语法错误

意外的':',需要keyword_end               popupContent:'marker_popup'

是错别字还是我根本做不到,需要重复整个包裹过程,如果没有,则包裹我的marker_index变量?试图保持干燥。

3 个答案:

答案 0 :(得分:4)

例如:

h= {
  type: 'Feature',
  geometry: {
    type: 'Point',
    coordinates: [event.longitude, event.latitude]
  },
  properties: {
    markerurl: event.photo.marker.url,
    divclass: marker_class,
  }
}
if has_popup
  h[:properties][:popupContent]= marker_popup
end
markers_index << h

答案 1 :(得分:1)

h= {
  type: 'Feature',
  geometry: {
    type: 'Point',
    coordinates: [event.longitude, event.latitude]
  },
  properties: {
    markerurl: event.photo.marker.url,
    divclass: marker_class,
  }.tap { |g| g[:popupContent] = marker_popup if has_popup }
}

请参见Object#tap

答案 2 :(得分:0)

除了像其他人提到的那样,在创建哈希之后执行if条件操作,如果语句的评估结果为true,则也只能填充哈希Key / Val对的值。然后,您只需使用三元运算符测试值是否为nil,即可稍后对其执行操作/不对其进行操作(条件?如果为true:如果为false):

Symfony 3.4