Работа с моделями Ruby on Rails - PullRequest
3 голосов
/ 21 июня 2011

Я новичок в ruby ​​on rails и у меня (возможно, простой) вопрос относительно производительности и передового опыта для Rails 3 . Я использую движок блога enki blog и вижу, что тот, кто написал этот движок блога, выбирает теги, используя следующую технику:

Tag.find(:all).reject {|tag| tag.taggings.empty? }.sort_by {|tag| tag.taggings_count }.reverse

Я не вижу цели ".reject", так как пустые теги удаляются каждый раз, когда статья создается, обновляется или уничтожается. Предполагая, что я прав в этом, это был бы лучший подход?

Tag.find(:all, :order => "taggings_count desc")

Я ищу производительность и удобочитаемость. Каков наилучший способ детализации результатов модели? Есть ли реальная разница между ".sort_by" и передачей: order в качестве параметра?

Заранее спасибо за любые ответы.

1 Ответ

2 голосов
/ 21 июня 2011

Вы правы, это определенно неэффективный код.

Существует значительная разница между sort_by и: order. : order используется для построения оператора SQL, то есть база данных сортирует записи до того, как возвращает их. sort_by - это метод Ruby, который переупорядочивает записи, которые база данных уже вернула. Как правило, база данных будет намного быстрее, поэтому user: order.

Я не могу сказать, нужен ли отказ или нет. Но если это равно , опять же, это будет намного быстрее сделать это в базе данных с помощью оператора WHERE Так что вы бы

Tag.find(:all, :conditions => "taggings_count > 0", :order => "taggings_count desc")

В Rails 3 это будет выглядеть как

Tag.where('taggings_count > 0').order('taggings_count desc')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...