Para customer_favs, pude guardar todas las instancias de un favorito para el cliente actual con el que estoy trabajando. El favorito para un cliente consiste en la identificación del cliente y la identificación del restaurante. Con eso, decidí recorrerlo y también recorrer todos los restaurantes y ver si la identificación de esa instancia del restaurante es la misma que el restaurant_id del favorito y devolverlo, lo que me da una variedad de favoritos.

Ahora lo que estoy tratando de hacer es encontrar una manera de devolver la instancia del restaurante a través del favorito que contiene el restaurant_id, solo quiero obtener el nombre del restaurante. Decidí iterar nuevamente a través de la matriz de favoritos e iterar a través de los restaurantes y comparar para ver si el restaurant_id de los favoritos es el mismo que el de las instancias del restaurante y tener esas instancias guardadas dentro de la variable, pero estoy obteniendo un error que dice "método indefinido` restaurant_id '".

def view_all_favorites(customer)
  customer_favs = customer.favorites

  get_res_id = customer_favs.each do |fav_res|
    Restaurant.all.select do |res|
      res.id == fav_res.restaurant_id
    end
  end

  get_res = Restaurant.all.select do |res|
    get_res_id.restaurant_id == res.id
  end

  puts "#{get_res}"
end
0
hannah 19 oct. 2019 a las 03:04

1 respuesta

La mejor respuesta

Los problemas mencionados en los comentarios son importantes, pero aquí hay una ligera edición para que funcione:

def view_all_favorites(customer)
  customer_favs = customer.favorites # get favorites from customer

  get_res_id = customer_favs.map do |fav_res| # get restaurant IDs from favorites
    fav_res.restaurant_id
  end

  get_res = Restaurant.all.select do |res| # get restaurants from their IDs
    get_res_id.include?(res.id)
  end

  res_names = get_res.map do |res| # get names from restaurants
    res.name
  end

  puts "#{res_names}"
end

Eso probablemente podría simplificarse a algo como esto:

def view_all_favorites(customer)
  favorite_restaurants = Restaurant.where(id: customer.favorites.map(&:restaurant_id))
  puts favorite_restaurants.map(&:name)
end

Pero, como dijo Tadman, es preferible establecer relaciones para que ni siquiera tengas que hacer eso.

0
Luke Persola 19 oct. 2019 a las 01:27