Условное заданное значение в хэше ruby - PullRequest
0 голосов
/ 06 декабря 2018

Я вычисляю расстояние между сайтом и магазинами, используя драгоценный камень Haversine.

Поскольку широта и долгота магазина могут быть nil, я хочу проверить, соответствует ли это значение вычисленному значению.в моем хеше для возврата должна быть строка, подобная этой: «без точного адреса».

Я написал этот метод, и он работает отлично, все еще только точка nil address:

    require 'haversine'

    class Api::V1::Angular::SitesController < Api::ApplicationController

    # GET /api/v1/angular/sites/:id/distances
      def stores_distances
        site      = Site.find params[ :id ]
        distances = Store.current.map do |store|
          {
            name: store.name,
            value: Haversine.distance(
                    site.address.latitude,
                    site.address.longitude,
                    store.address.latitude,
                    store.address.longitude
                  ).round(2)
          }
        end

        render json: {
          distances: distances.to_json
        }
      end
end

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

На основании комментария Дэйва:

  def stores_distances
    site      = Site.find params[ :id ]
    distances = Store.current.map do |store|
      {
        name: store.name,
        value: distance(site.address, store.address) || 'no precision address'
      }
    end

    render json: {
      distances: distances.to_json
    }
  end
  def distance(site_address, store_address)
     return nil unless store_address.latitude && store_address.longitude
     Haversine.distance(
       site_address.latitude,
       site_address.longitude,
       store_address.latitude,
       store_address.longitude
     ).round(2)
  end
0 голосов
/ 06 декабря 2018

Как насчет?

  def stores_distances
    site      = Site.find params[ :id ]
    distances = Store.current.map do |store|
      value = Haversine.distance(
        site.address.latitude,
        site.address.longitude,
        store.address.latitude,
        store.address.longitude
      ).round(2) || 'no precision address'

      {
        name: store.name,
        value: value
      }
    end

    render json: {
      distances: distances.to_json
    }
  end

Когда ваш Haversine.distance равен нулю, тогда включается OR и строка устанавливается на значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...