Приготовьтесь забыть .rhtml и .rxml
Илья • 21 февраля 2007 г.
Судя по этому changeset’у, в скором времени вместо расширений .rhtml и .rxml нужно будет использовать .erb и .builder соотвeтственно.
И это правильно, я считаю.
Расширения .rhtml и .rxml полностью перестанут работать в третьей версии Ruby on Rails.
Баш скрипт для быстрого создания rails-приложений
Илья • 8 февраля 2007 г.
Наткнулся на очень удобный баш скрипт (для мак ос и юниксов, разумеется), который делает вот что:
- Создаёт чистое рельсовое приложение.
- Импортирует его в свн репозитарий.
- Удаляет и ставит игнор на логи, кэш, сессии и прочее в папке tmp.
- Копирует database.yml в database.example и ставит на него игнор.
Очень удобно! Качать тут.
Ошибка после обновления ruby gems до 0.9.x
Илья • 7 февраля 2007 г.
В связи с выходом новых рельс, нужно было обновить ruby gems до версии 0.9.x.
После обновления гемов, при попытке установить новые рельсы, вылетела ошибка:
ERROR: While executing gem ... (NoMethodError)
undefined method `refresh' for #<Hash:0x14fbfd0>
Ошибка проявляется как на Мак ОС, так и на линуксе и даже солярисе.
Решается очень просто: стираем файл source_cache в системной папке ruby/gems/1.8
Updated: ребята с Riding Rails уже написали об этой проблеме.
N00bs on Rails
Илья • 31 января 2007 г.
There are a lot of people using Rails who aren’t really programmers. The problem is, they often make classic n00b mistakes. The result can be very messy code written in a very elegant framework — like shooting yourself in the foot with an unusually beautiful gun.
Используем Локомотив как стандартный Руби
Илья • 30 января 2007 г.
Тем, кто пользуется Mac OS и Locomotive посвящается этот небольшой трюк.
С помощью нехитрой ловкости рук, можно прописать весь environment локомотива подгружаться каждый раз, когда вы включаете терминал.
Это очень удобно, если у вас в системе нету ни Руби, ни рельсов, зато они есть под локомотивом. Вы и не заметите разницу: просто включаете терминал и вот у вас и руби и рельсы и все гемы с рмагиком :)
Собственно вот здесь прекрасно описано как это сделать.
Единственное замечание, я в .locomotive.environment.bash в конце ещё clear добавил, чтобы консоль не заспамливать.
Используем символ как Proc
Илья • 29 января 2007 г.
Просто замечательный пример элегантности Руби:
Вместо:@people.collect{|human| human.name }
Делаем так:
@people.collect(&:name)
Dave Thomas подробно описал как это работает.
Rails + Apple = ♡
Илья • 29 января 2007 г.
По нашим тщательным подсчётам, около 90% из 550 людей, бывших на RailsConf 2006 используют ноутбуки Apple.
Update: прошу прощения за опечатку.
Виджет: RegexWidget
Илья • 28 января 2007 г.
Если вы используете Мак ОС и часто пишете регэкспы, то RegexWidget — виджет для тестирования регэкспов вам очень понравится!
Ловим exception внутри выражений
Илья • 28 января 2007 г.
Век живи, век учись.
Не так:if @user.name
@user.name.capitalize
else
"name not set"
end
И не так:
@user.name? ? @user.name.capitalize : "name not set"
И даже не так:
begin
@user.name.capitalize
rescue
"name not set"
end
А вот так:
@user.name.capitalize rescue "name not set"
Красота…
Update: Привёл немного не подходящий пример в прошлый раз: @user.name обычно не возвращает исключение, поэтому этот метод тут не поможет.
Another update: На самом деле этот хак не стоит воспринимать слишком серьёзно. Есть большая вероятность того, что вы не поймаете какое-нибудь действительно важное исключение, которого вы не ожидали.
Что окончательно устарело в Rails
Илья • 27 января 2007 г.
Rails очень быстро меняется. Не успеваешь закончить писать приложение, как оно уже устарело :) Хочу написать несколько очевидных маленьких штуковин, которые уже достаточно давно устарели, но не смотря ни на что, всё равно продолжают использоваться программерами.
Во-первых, следующие переменные давно уже нужно использовать как методы, то есть без знака @:
Было:@request, @response, @session, @headers, @template, @cookies и @flash
request, response, session, headers, template, cookies и flash
ActionController:
expire_matched_fragments() → expire_fragment()
keep_flash() → flash.keep()
redirect_to_path() → redirect_to(path)
redirect_to_url() → redirect_to(url)
ActionView:
@content_for_layout → yield
@content_for_some_fragment → yield :some_fragment
link_image_to() → link_to(image_tag())
link_to 'Bla bla', :post => true → link_to "Bla bla", :method => "post"
render_partial → render :partial
render_partial_collection → render :partial => 'bla', :collection => @b
human_size() → number_to_human_size()
start_form_tag(); end_form_tag() → form_tag :action => "bla" do
text_field 'bla', 'bla'
end
ActiveRecord:
:dependent => true → :dependent => :destroy
:exclusively_dependent => true → :dependent => :delete_all
find_all() → find :all
find_first() → find :first
Update: Александр Сенько напомнил, что:
Вызывать следующие методы в вашем контроллере больше не нужно, рельсы теперь делают это автоматом:model; service; observer; depend_on; dependencies_on
Ничего не забыл?
Наблюдаем за ActiveRecord
Илья • 26 января 2007 г.
Небольшая, но приятная находка, которая позволяет следить за тем что делает ActiveRecord прямо из script/console.
$ script/console
>> ActiveRecord::Base.logger = Logger.new(STDOUT)
=> #<Logger:0x2814134 ...>
>> user = User.find :first
User Load (0.000346) SELECT * FROM users LIMIT 1
=> #<User:0x2665478 ...>
По-поему очень удобно.
Именные роуты
Илья • 26 января 2007 г.
Пожалуйста не забывайте, что существует такая прекрасная штуковина как именные роуты. Поэтому, в частности, не нужно каждый раз городить штуки, на подобии этой вот:
link_to "Vasya Pupkin", :controller => "users", :action => "show", :id => user
Особенно не приятно, когда такая длиннющая конструкция встречается в проекте много раз. В этой ситуации нас выручат именные роуты. И вот как они работают в двух словах:
В config/routes.rb создаём новое правило:map.user "users/:id", :controller => "users", :action => "show"
Заметьте, что вместо привычного map.connect, я использовал map.user. А это значит, что теперь в любом уголке своего приложения я могу использовать метод user_url(user), который вернёт мне :controller => ‘users’, :action => ‘show’, :id => user.id.
Теперь переписываем нашу ссылку, для использования с новеньким именным роутом:
link_to "Vasya Pupkin", user_url(@user)
Не правдо ли так гораздо чище и быстрее?
А теперь, перед тем как создать два десятка красивеньких именных роутов и избавиться от трёхэтажных link_to, посмотрите что ещё можно сделать.
Это работает не только с роутами, но и с любыми методами, которые принимают в виде аргументов хеш (сейчас это жутко модно). Если у нас подряд идёт вызов нескольких методов и в них передаются почти одинаковые хеши, то мы можем их объеденить при помощи метода #with_options. Вот, например, три обычных именных роута:
map.users "/users", :controller => "users", :action => "list"
map.user "/users/:id", :controller => "users", :action => "show"
map.deadsouls "/users/deads", :controller => "users", :action => "dead"
Как видите, все они ссылаются на один и тот же контроллер — users. Получается не очень DRY (Dont Repeat Yourself). Тут то и приходит на помощь прекрасный #with_options:
map.with_options :controller => "users" do |users|
users.users "/users", :action => "list"
users.user "/users/:id", :action => "show"
users.deadsouls "/users/deads", :action => "deads"
end
Теперь кусок :controller => “users” передаётся во все роуты, хотя написали мы его только один раз.
Заметка написана по мотивам блога великолепного Jamis Buck.
Captchator
Илья • 17 января 2007 г.
Captchator (captcha generator) это онлайн-сервис, готовый бесплатно генерировать для вашего приложения CAPTCHA изображения (изображения с буквами/цифрами для отделения людей от компьютеров). Очень быстро и просто.
Гудбай RMagick!
Илья • 15 января 2007 г.
Привет Image Science!
ImageScience is a clean and happy Ruby library that generates thumbnails—and kicks the living crap out of RMagick. Oh, and it doesn’t leak memory like a sieve. :)
Если вы используете RMagick только лишь для того чтобы создавать простые уменьшенные копии своих изображений для предпросмотра, то вам стоит присмотреться к Image Science, вместо того чтобы использовать горилла-подобного монстра RMagick, который жрёт слишком много оперативной памяти и всё время портит настроение.
Жалко только что не всегда есть возможность установить сторонние гемы на своём хостинге…

