ammet
@ammet
Ruby on Rails developer

Ruby On Rails — как отрефакторить (массив Ruby)?

1.)tournament = Tournament.where("date = ?", date)"
2.)arr = []
3.)tournament.map do |x|
4.) arr += [x.id] if x.tournament_locales.where(:locale=>"ru").count > 0
5.)end
6.)return arr

Строчки 2-6. Часто приходится делать подобное, особенно не нравится это явное объявление переменной. Возможно, есть какое-то более не костыльное решение?
  • Вопрос задан
  • 2617 просмотров
Решения вопроса 1
mgyk
@mgyk
tournament.select{|x| x.tournament_locales.where(:locale => "ru").count > 0 }


Хотя в этом примере гораздо лучше на стороне БД это сделать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Able1991
@Able1991
Пишу на рельсах
Юзай DataMapper
arr = Tournament.all(:conditions => {Tournament.date => date, Tournament.tournament_locales.locale => 'ru'})
Ответ написан
Комментировать
kirillplatonov
@kirillplatonov
Ruby on Rails developer
results = Tournament.select("tournaments.id, (select count(*) from tournament_locales where locale = 'ru') locales_count").joins(:tournament_locales).where("date = ? AND locales_count > 0", date).pluck('tournaments.id')
results


Мог где-то ошибиться в коде, будут ошибки - кидайте, поправим.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы