Rake task to send users a reminder to post with conditions
Never User.all.each in the real world. That loads your entire table into memory and instantiates ActiveRecord models for every record. You want User.find_each do |user|, which uses find_in_batches to load 1000 records at a time.
Don't do simple filtering in Ruby, do it in the database. This...

if user.reminder == true 


should be a simple scope that prevents these records from ever being loaded. Something like this:

class User &lt; ActiveRecord::Base
  scope :with_reminder, -&gt; { where(reminder: true) }
end


Now, your top-level loop can use the scope:

User.with_reminder.find_each do |user|


This filters out a huge number of users who would otherwise be loaded from the database needlessly.
Your if/else aren't actually correct, since your intent is to load all users with reminder = true. You load all users, and then your if looks for user.reminder == true, but your else doesn't. It affects all users with reminder of true or false, and then sets their reminded to false.

  ... which tells me that the user hasn't an ActiveRecord assigned to it? Because the reminder_time column exists and is set (to 16:00).


Err, no, that's not at all what that tells you. Nothing has "an ActiveRecord" assigned to it, that isn't at all how ActiveRecord works. Every record in the database is wrapped in an ActiveRecord object as you read it from the database, it's impossible for some users to "have" ActiveRecords and others not to.

See point 3. Your else currently checks all records, including those with reminder == false, and presumably those records don't have a reminder_time set.
It's really not clear what you're trying to do with Time.current.strftime("%H") == user.reminder_time + 1. What is "1"? You have no unit, so it means "1 second". Your probably never going to hit that.