Так как слаг в базе данных не существует, вы не можете сначала запросить его. Что вам нужно сделать, это поиск по названию. Но для того, чтобы сделать это, ваше отображение «имя к слизняку» должно быть обратимым. Вы должны быть в состоянии сделать
name = 'San Francisco'
slug = convert_to_slug(name) #san-francisco
name == convert_to_name(slug) #true
Так что, учитывая слизняк, вы знаете, каково его имя - тогда вы можете сделать find_by_name. Прямо сейчас ваше преобразование слизни
downcase.gsub(/\s/, '-')
необратимо, если только у вас нет неявной информации, которой вы не делитесь с нами, например, «есть только пробелы и каждая первая буква написана заглавными буквами». Так что это не может быть сделано, и вам лучше сделать это обычным атрибутом, а не виртуальным. Если ваше преобразование обратимо, вам просто нужно использовать
find_by_name(convert_to_name(slug))