Я использую Ruby on Rails 5.1, и у меня есть модель Entry
, которая имеет атрибут word
. Может быть несколько Entries
с одним и тем же словом, поскольку их уникальность основана на word
плюс другое поле. В контроллере я создаю выпадающий селектор @unique_entries
, который должен включать только первый экземпляр Entry.word
.
Я пытался сделать это под разными углами, но просто не могу понять, как это правильно.
Последнее, что я попробовал, было что-то вроде этого псевдокода (извините, я удалил реальный код после сбоя):
all_entries = Entry.all.order(word: :asc)
unique_entries = []
all_entries.each do |entry|
if unique_entries.include?(entry.word)
use the index to delete this record from all_entries
else
unique_entries << entry.word
end
end
По крайней мере, в моей голове это должно пройти через коллекцию all_entries
, проверяя, находится ли каждый entry.word
в unique_entries
, который начинается как пустой массив. Если нет, то entry.word
добавляется к unique_entries
. Если это так, он удаляет entry
из коллекции ActiveRecord all_entries
, поскольку это означает, что он уже существует. Этот подход не удался, удаляя содержимое из массива образцов непоследовательно.
Я понимаю, что это медленный путь, и он подойдет только тогда, когда у меня есть небольшое количество записей, поэтому я открыт для предложений других способов подойти к этому. Я все еще относительно новичок в разработке RoR, и мне еще не приходилось иметь дело с очень сложными запросами ActiveRecord, поэтому, пожалуйста, не наступайте мне на голову, потому что я уже не сделал то, что было бы "очевидно" для вас. Спасибо.