Виталий Янчук - Домашняя страница
Логин: Twitter Facebook
Тэги:
Rails

Блог о Ruby on Rails Rss-small


Ну примерно так можно

duplicates = User.find( :all,
  :select     => "email, COUNT(email) AS duplicate_count",
  :conditions => "email IS NOT NULL AND email != ''",
  :group      => "email HAVING duplicate_count > 1"
)

Со временем количество записей в вашем проэкте вырастет настолько что считать счетчики, например комментариев или кол-ва тегов к записи станет чрезмерно долгим процесом и вам захочется закешировать этот показатель.

К счастью во фреймфорке уже есть такая функциональность, и она называется counter_cache

Для использования вам нужно в вашу ассоциацию добавить такое ключ/значение

:counter_cache => true

Например для модели Comment, который принадлежит модели Post это будет выглядеть так:

class Comment < ActiveRecord::Base
  belongs_to :post, :counter_cache => true
end
продолжение здесь

Все кто пользуется текстмейтом наверняка видели стандартный поиск по файлам.

Это тормознутеший инструмент, это просто позор. Как по мне, это самый большой недостаток не настроенного текстмейта.

Этот поиск не идет ни в какое вравнение с молниеносным открытием файла по имени, которое более известно как command+T.

Но, друзья мои есть решение, как же я раньше мимо него проходил, но поставил неделю назад и не могу нарадоватся, и вам тоже желаю.

Это конечно плагин, называется AckMate, в его основе лежит тулзень Ack (http://betterthangrep.com/) которая к слову написана на перл и чудесно понимает регулярные выражения, это хорошо но это конечно не главное.

А главное это то что поиск становится рельно быстрым, и все окно редактора не застывает на время поиска и не нагружает процесор под 100%, и с виду поприятней, и фильтровать по папкам можно, и по типам файлов, вообщем просто нормальный поиск по проэкту.

Приятная особенность это поле Options, там можно задавать типы файлов для поиска, либо решулярные выражения.

Пару примеров для опций: -Gmodule — поиск только по файлам имееющим слово module в названии ruby — поиск только по руби файлам, кстати есть автокомплишн на стандартные типы noyaml — не искать в yml файлах

Ах да установка, она простая, как и все на маке, вам нужно скачать файл плагина и сделать даблклик.

Больше информации по плагину в вики:
https://github.com/protocool/AckMate/wiki/Usage

Небольшой трик как быть увереным что включена нужная версия руби. Актуально для тех кто работает одновременно и с Rails 2 и с Rails3 и использует для переключения RVM.

Есть в rvm особенность, если в каталоге лежит файлик .rvmrc то при первом входе в каталог система спросить, вполнить ли файл, он выполнится и потом уже не будет спрашивать, таким образом когда делаем cd в проект включается правильная версия.

Теперь во все проэкты где я использую 3 rails кладу файл такого содержания:

$ cat .rvmrc 
rvm use 1.9.2

Текстмейт хороший редактор, однако его стиль почему-то до сих пор напоминает нам оболочку аква из 9 макос, что конечно немного странно.

Проще говоря сделаем из того что сейчас есть:

old textmate window

Вот такой современный, cocoa like вид

Если вы просто запустите рельзовавую консоль  script/console и попытаетесь выполнить что-то вроде root_url, вы полуите ошибку. Мне бывает нужно проверить что выведет та или иная функция для роута, но создавать для этого спец страницу глупо.

Итак все что нужно сделать это подключить ActionController::UrlWriter

include ActionController::UrlWriter
# И так как консоль не знает про домен, его нужно задать для *_url методов
default_url_options[:host] = 'vitalik.com.ua'

Проверяем:

>> posts_url
=> "http://vitalik.com.ua/posts"
>> posts_path
=> "/posts"
>> post_path(1)
=> "/posts/1"
>> post_url(1)
=> "http://vitalik.com.ua/posts/1"

UPD Для тех же целей в Rails 3 нужно использовать

include Rails.application.routes.url_helpers

Perl vs Python vs Ruby vs PHP

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

http://xodian.net/serendipity/index.php?/archives/27-Benchmark-PHP-vs.-P...



Я просматривал пару тестов производительности PHP (к примеру этот), и они сравнивали, в основном, объектно-ориентированый подход с процедурным. Я решил написать свой набор тестов для хорошо-известных языков веб-разработки которые были под рукой: PHP, Python, Perl, Ruby.

продолжение здесь