Список в Ruby драгоценном каме - PullRequest
1 голос
/ 16 февраля 2020

Я делаю ruby cli, который выводит список игровых предложений, вырезанных с сайта.

Список быстро распечатывается с использованием

def games_sales
  Deal.all.each_with_index do |deal, index|
    puts "#{index + 1}.  #{deal.title}"
  end 

  puts "What game do you want to see?"
  input = gets.strip

  game_selection(input.to_i)
end

Моя проблема возникает, когда пользователь просит выбрать элемент из списка.

def game_selection(input) 
  deal = Deal.find_by_index(input)
  #binding.pry
  deal.each do |deal| 
    puts "#{deal.index}"
    puts " Name: #{deal.title}" 
    puts " Price: #{deal.price}"
    puts " Store: #{deal.store}"
    puts " Expiration: #{deal.expiration}"
  end 
  deal
end 

Возвращает ввод int но только первый элемент в списке каждый раз.

Я забыл свой метод find_by_index:

def self.find_by_index(input)
  all.select do |deal|

  end
end 

, который является неполным

1 Ответ

0 голосов
/ 16 февраля 2020

Не уверен на 100%, правильно ли я понял ваш вопрос и используете ли вы Rails, но Deals.all дайте мне подумать об этом.

Мне пришлось заменить Deals.all на DEALS для тестирования, так как у меня не запущено приложение rails. Поэтому я использовал массив OpenStructs, чтобы подделать результат вашей модели.

# this fakes Deals.all
require 'ostruct' 
DEALS = [
    # add any more properties the same way as title, separated by comma
    OpenStruct.new(title: 123),
    OpenStruct.new(title: 456) 
]

def games_sales
  DEALS.each_with_index do |deal, index|
    puts "#{index + 1}.  #{deal.title}"
  end 

  puts "What game do you want to see?"
  input = gets.strip

  game_selection(input.to_i)
end

def game_selection(input) 
  deal = DEALS.at(input-1)
  p deal[:title]
end 

def self.find_by_index(input)
  all.select do |deal|
    deal.index == input
  end
end 

games_sales

Результат при выборе 1 равен 123, при выборе 2 вы получите 456, из-за p deal[:title] в коде выше.

Я думаю ваш find_by_index должен получить правильный индекс, и в моем примере мне пришлось использовать at(index) как at(input-1), чтобы получить правильный результат.

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

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