I am of the old school sql users.  I really like the verbosity of sql.  Having said that I really think this is ok.  Its neither here nor there for me because I can read it all.  About the only thing I wish it would be instead of setting last_attempt = arel_table....  I wish you could just use the table name as a variable that represents arel_table and use .syntax for the field.  In other words the statement would be

where(element.last_attempt_at.eq(nil).or(element.last_attempt.lt(1.hour.ago)))

That makes more sense to me than arel_table