(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

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]

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

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.

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

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

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

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

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}'.

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.