
Хочу поделиться в вами несколькими трюками, которые помогут сделать работу с Ruby on Rails лучше, быстрее, а также позволят вам много зарабатывать и более лучше одеваться.
1. Routes и запросы в консоли
Запускаем rails console и вызываем метод app: теперь в консоли можно делать то же что и в интеграционных тестах
>> app.class => ActionDispatch::Integration::Session
Что это даёт?
Например можно тестировать routes прямо в консоли:
>> app.pages_path => "/pages" >>app.page_path(@page) => "/pages/345"
Или делать запросы к нашему Rails application:
>> app.get("/pages/345") => 200 >> app.response.body => "<!DOCTYPE html PUBLIC \'-//W3C//DTD XHTML 1.0 Transitional//EN\'\n ..."
Обо всех методах доступных через app можно почитать тут ActionDispatch::Integration::Session и тут: ActionDispatch::Integration::RequestHelpers
2. Хелперы в консоли
С помощью helper мы можем получить доступ как к встроенным в Rails хелперам:
>>helper.mail_to "me@et.you" => "<a href=\"mailto:me@et.you\">me@et.you</a> >>helper.pluralize(2,'bug') => "2 bugs"
так и к своим:
def give_me_blog_link <a href='myblog.com'>Blog</a> end
>> helper.give_me_blog_link => "<a href='myblog.com'>Blog</a>
Но что делать когда в нашем хелпере используется instance variable (например client)?
def os_adviser if @client.geek? 'free bsd' elsif @client.blond? 'mac os' else 'windows' end end
Проблему можно решить воспользовавшись Object#instance_variable_set
>> helper.instance_variable_set :@client, Client.first => #<Client id: 3034, ... >> helper.os_adviser => "windows"
Ок, а что если хелпер использует данные из params?
def do_you_want_meat params['meat'] ? 'О да, стейк с кровью!' : 'Нет, спасибо, мне бы фруктов' end
В этом нам поможет небольшой хак:
>>helper.controller = OpenStruct.new( { :params => {} } ) => #<OpenStruct params={}> >>helper.do_you_want_meat => 'Нет, спасибо, мне бы фруктов' >>helper.controller = OpenStruct.new( { :params => { :meat => true } } ) => #<OpenStruct params={:meat=>true}> >>helper.do_you_want_meat => 'О да, стейк с кровью!'
3. Безопасные изменения в консоли
Если вы запускаете консоль чтобы что-то протестировать на production сервере, есть опасность ненароком удалить или изменить данные в базе. Чтобы этого избежать можно воспользоваться запуском консоли с опцией --sandbox
>>rails r 'puts User.last.name' => 'Fedor' >>rails c >>user = User.last >>user.name = "Petr" >>user.save >>user.name => "Petr" >>exit >>rails r 'puts User.last.name' => 'Fedor'
4. Удаление элементов из хэша по ключу
Удаляет перечисленные элементы из хэша и возвращает получившийся результат
>>options = {:one => 1, :two => 2, :three => 3, :four => 4} =>{:one => 1, :two => 2, :three => 3, :four => 4} >>options.except!(:one, :two) =>{:three => 3, :four => 4}
5. Поиск подстроки в строке
Обычно это делается с помощью
>>string = 'corvalol' >>string =~ /lol/ => 5 # позиция в строке где найдено совпадение
Альтернативный способ, на мой взгляд несколько грациознее
>>string = 'corvalol' >>string['lol'] => 'lol' # если найдено совпадение, возвращает его
Это только 5 фишек, которые показались мне интересными, по ссылкам ниже их гораздо больше.
confreaks.com/videos/889-railsconf2012-ten-things-you-didn-t-know-rails-could-do
37signals.com/svn/posts/3176-three-quick-rails-console-tips
rubyreloaded.com/trickshots
stackoverflow.com/questions/151030/how-do-i-call-controller-view-methods-from-the-console-in-rails
