ActiveRecord will handle converting a Time into something your database 
understands, so you don't need to worry about that.  You can also write the 
where clause manually like you did, or you can use arel, which would be my 
preference.  You can also chain .where()'s, since they just return 
ActiveRecord::Relations and don't actually execute until they need to. 
 Here's how you could rewrite your code:

@products = category.products.where( 'draft' => false, 'active' => true, 
'funded' => false).where(Product.arel_table[:enddate].gt(Time.now))

I would personally define that as a scope on the Product model:

scope :not_expired, -> { arel_table[:enddate].gt(Time.now) }

And then your code could become:

@products = category.products.not_expired.where( 'draft' => false, 'active' 
=> true, 'funded' => false)

I would also probably create scopes for all of those other conditions, or 
maybe wrap them into a single scope if you can produce a term that 
accurately describes products that are in that exact state.

On Sunday, January 29, 2017 at 1:29:03 PM UTC-5, Joe Guerra wrote:
>
> I'm trying to figure out how to compare my enddate > Time.now in my where 
> clause.
>
> enddate is a date field, I'm just trying to only display products that 
> haven't expired (by the date field).
>
>
> I've tried...
>
> require 'time'
>
> products.where(['enddate > ?', Time.now]) 
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/3b66a09b-e6b6-479b-9598-9811e2eab43f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to