Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do date helpers not work in Rails console?

I have a datetime attribute on a record:

 1.9.3p194 :024> f.last_contact
 => Thu, 11 Aug 2011 00:00:00 UTC +00:00 

But when I try time_ago_in_words at the console, it doesn't work:

> time_ago_in_words(f.last_contact)
NoMethodError: undefined method `time_ago_in_words' for main:Object

I also tried distance_of_time_in_words which the docs say should work with Time, Date & DateTime objects.

> to_time = Time.now
 => 2012-09-08 12:22:16 -0500 
> distance_of_time_in_words(f.last_contact, to_time)
NoMethodError: undefined method `distance_of_time_in_words' for main:Object

What is the cause of this? Shouldn't Rails Console load all the necessary libraries and dependencies for all of Rails methods to work?

like image 609
marcamillion Avatar asked Sep 08 '12 17:09

marcamillion


2 Answers

You can use all helpers (built-in and your own) through helper object

helper.time_ago_in_words(1.hour.ago)
=> "about 1 hour"

Or import required helpers

include ActionView::Helpers::DateHelper
time_ago_in_words(1.hour.ago)
=> "about 1 hour" 
like image 178
dimuch Avatar answered Nov 03 '22 15:11

dimuch


Try

helper.time_ago_in_words(...)
helper.distance_of_time_in_words(...)

Calling helper. seems to give you access to any/all defined helpers.

More info in this answer: How do I call controller/view methods from the console in Rails?

The reason, I think, that you can't just call the helper directly is because they're not in scope from where you are (in the console), as opposed to code that's running inside a view where the helpers are in scope.

like image 24
jefflunt Avatar answered Nov 03 '22 17:11

jefflunt