вернуть экземпляр через вложенную итерацию - PullRequest
0 голосов
/ 19 октября 2019

Для customer_favs мне удалось сохранить все экземпляры избранного для текущего клиента, с которым я работаю. Фаворит для клиента состоит из идентификатора клиента и идентификатора ресторана. После этого я решил перебрать его, а также перебрать все рестораны и посмотреть, совпадает ли идентификатор этого экземпляра ресторана с restaurant_id фаворита, и вернуть его, который дает мне массив фаворитов.

Теперь я пытаюсь найти способ вернуть экземпляр ресторана через фаворит, который содержит restaurant_id, я просто хочу получить название ресторана. Я решил повторить итерацию по массиву избранного, пройтись по ресторанам и сравнить, чтобы увидеть, совпадает ли restaurant_id из списка с экземплярами ресторана и сохранить ли эти экземпляры внутри переменной, но я получаюошибка "неопределенный метод` 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

1 Ответ

0 голосов
/ 19 октября 2019

Проблемы, упомянутые в комментариях, значительны, но вот небольшое исправление, чтобы заставить его работать:

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

Это, вероятно, можно упростить до чего-то вроде этого:

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

Но, как сказал Тадман, предпочтительнее установить отношения, чтобы вам даже не приходилось это делать.

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