Общая проблема, которую я решаю:
Я новичок в Ruby и работаю над созданием метода поиска для своего приложения, в котором пользователь ищет имя одной модели, foo, которая может иметь много экземпляров этого имени, и мы возвращаем результаты всех связанных экземпляров. другой модели, Day. Однако каждый foo имеет несколько версий дня, с которым он связан (всего существует 4 разных версии, с которыми он может быть связан. Мы отображаем эти версии через foo, а foo содержит их в логических значениях: include_in_standard, include_in_v1 и т. д.).
Мне нужен мой метод поиска, чтобы сообщить мне, какие версии foo включены для каждого дня, чтобы я мог соответствующим образом отображать результаты поиска. Кроме того, для разных пользователей доступны только определенные дни. У меня получилось так, что я передаю информацию о днях и версиях из модели в контроллер, однако в контроллере у меня проблема с получением только дней, которые доступны текущему пользователю.
Структура кода:
В модели Day у меня есть метод поиска, который возвращает следующее:
results={:result_case=>result_case, :days_set=>days_set, :term0=>term0, :term1=>term1}
result_case — целое число, term0 и term1 — строки.
days_set - это набор, который формируется следующим образом
days_set=Set.new
array_of_foo.each do |f|
f.join_table_connecting_foo_and_days.days.each do |foo|
days_set+={:day=>d, :standard=>f.include_in_standard, :v1=>f.include_in_v1, :v2=>f.include_in_v2, :v3=>f.include_in_v3, :v4=>f.include_in_v4}
end
end
days_set
В моем контроллере я вызываю метод поиска, который возвращает результаты, и присваиваю его локальной переменной results в контроллере. У меня также есть массив всех дней, доступных для current_user, available_days.
Микроцель:
Я хочу получить набор или массив, который представляет собой просто хэши из days_set, где день включен в available_days. То есть, если мой days_set в настоящее время
[{:day=>d1, :standard=>true, :v1=>false, :v2=>false, :v3=>true, :v4=>true},
{:day=>d2, :standard=>false, :v1=>true, :v2=>false, :v3=>true, :v4=>false},
{:day=>d3, :standard=>false, :v1=>false, :v2=>false, :v3=>true, :v4=>true},
{:day=>d4, :standard=>true, :v1=>true, :v2=>true, :v3=>true, :v4=>true},
{:day=>d5, :standard=>false, :v1=>false, :v2=>false, :v3=>true, :v4=>false},
{:day=>d6, :standard=>true, :v1=>false, :v2=>true, :v3=>false, :v4=>true}]
available_days=[d1, d3, d4]
тогда я хочу
[{:day=>d1, :standard=>true, :v1=>false, :v2=>false, :v3=>true, :v4=>true},
{:day=>d3, :standard=>false, :v1=>false, :v2=>false, :v3=>true, :v4=>true},
{:day=>d4, :standard=>true, :v1=>true, :v2=>true, :v3=>true, :v4=>true}]
Ошибка/проблема/код, который не работает:
Я пытался искать идеи о том, как это сделать в другом месте, но я не думаю, что у меня есть словарь кодирования, чтобы описать то, что я пытаюсь сделать.
Я думал, что это сработает, но он генерирует ошибку Не удается преобразовать символ в целое число в строке, отмеченной ** (которой нет в коде).
days_set=results[:days_set]
** new_days_set=days_set.keep_if{|day_hash| available_days.include? day_hash[:day]
Вопросы:
Как я могу получить хэши в моем наборе days_set, чей день находится в available_days?
Я сталкивался с этой ошибкой Не удается преобразовать символ в целое число чаще, чем с любой другой ошибкой, по крайней мере раз в неделю, а может и чаще. Я чувствую, что это указывает на какую-то концепцию, которую я не совсем понимаю. Можете ли вы сказать мне, что это за концепция, чтобы я мог искать информацию о ней и/или направлять меня к какой-либо информации о ней? Я не знаю, как называется то, что я ищу, поэтому его трудно найти.
Спасибо.
Set
? Это не стандартный класс Ruby. - person lurker   schedule 24.07.2013