Хочу поделиться в вами несколькими трюками, которые помогут сделать работу с 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.os_adviser :@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. Удаление элемента из хэша по ключу
Удобная штука, интересно, появится ли это в Ruby.
>>options = {:color => 'black', :size => 'medium', :city => 'London'}
=>{:color => 'black', :size => 'medium', :city => 'London'}
>>options.except!(:city)
=>{:color => 'black', :size => 'medium'}
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
Автор: naezdnik