(Beginner) Finding a database object within a time interval

Hello,

I’m trying to create a find statement that should find an element
which start_date and end_date are within Time.now. If I for example
have an object with a start_date of 2011-05-04 and end_date of
2011-05-19, the find statement should find the elment(s) that are
within that time peroid. My code looks like this:

def current_tee
@current_time = Time.now
@current_tee = Tee.find(:conditions => [
“id = ? AND featured => true AND start_date > #{@current_time}
AND end_date <= #{@current_time}”, params[:id]
])
end

And:

def show
@tee = current_tee
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @tee }
end
end

I keep getting this error: Couldn’t find Tee without an ID.

Any tips on how to solve this?

Thanks!
// Anders

On 8 May 2011 13:58, Anders_P [email protected] wrote:

@current_tee = Tee.find(:conditions => [
“id = ? AND featured => true AND start_date > #{@current_time}
AND end_date <= #{@current_time}”, params[:id]

Did you mean to require id = params[:id]? That means it can only ever
find the one with that id, and then only if its time fields fit.
Also note that this method would be better as a scope method of the
Tee model, though that is not the cause of the error.

end
end

I keep getting this error: Couldn’t find Tee without an ID.

Have you checked that params[:id] actually contains a value? Have a
look in development.log to see what params are being passed in. Also
have a look at the Rails Guide on debugging and find out how to use
ruby-debug to break into your code and examine data and follow flow.
It is an invaluable technique when you cannot work out what is going
on.

Colin

On 8 May 2011, at 13:58, Anders_P [email protected] wrote:

 @current_tee = Tee.find(:conditions => [
   "id = ? AND featured => true AND start_date > #{@current_time}

AND end_date <= #{@current_time}", params[:id]
])
end

You either need Tee.find :all, :conditions => …

Or Tee.find some_id (or Tee.find :first, :conditions => … if you only
want one record)

But you’ve got something halfway between the two

Fred

On 8 May 2011, at 18:51, Anders_P [email protected] wrote:

I had also forgot ’ ’ before and after ‘#{current_time}’.

If you use the placeholder syntax ( ie :conditions => [“start_date <
?”, current_time]) then you don’t need to worry about that and other
SQL escaping problems

Fred

Thanks for the tip, got a bit cleaner.

On May 8, 8:02pm, Frederick C. [email protected]

Thanks for your answer, I think I got it to work.

def current_tee
current_time = Time.now
@current_tee = Tee.find :all, :conditions => [
"featured = true AND start_date < ‘#{current_time}’ AND end_date

= ‘#{current_time}’"
]
end

I had also forgot ’ ’ before and after ‘#{current_time}’.

Thanks!

// Anders

On May 8, 5:13pm, Frederick C. [email protected]