Мой метод загружает список стран (код, название) в базу данных, но перед этим он должен проверить, если данные о стране еще не существуют. Это отлично работает:
def self.load_countries
get_countries.each do |country|
code, name = country
if find_by_code(code).nil?
create({ 'name' => name, 'code' => code })
end
end
end
Однако, поскольку я новичок в Ruby, я хочу изучить лучшие практики. Итак, в этом коде я не уверен в двух вещах, которые могут быть (или не могут быть) оптимизированы:
- find_by_attribute возвращает оператор "select * from table". В этом случае, когда мне не нужны какие-либо данные из базы данных - я просто хочу знать, существует запись или нет - выбор всей строки кажется мне немного неэффективным. Есть ли лучший способ решить эту проблему? Например, «выбрать 1 из таблицы, где ...» с помощью ActiveRecord?
Этот вопрос может быть глупым, но я хочу быть уверенным: когда я запускаю цикл с get_countries.each, нормально ли использовать метод вместо переменной? Разве один и тот же метод не называется каждым циклом (N раз)? Другими словами, будет ли это более эффективным:
страны = get_countries
страны. Каждая страна | страна |
Любые комментарии к этим нескольким строкам кода приветствуются, поскольку тот факт, что он работает, не обязательно означает, что я делаю это правильно.
Спасибо.