How to set default date and include_blank in date_select in Rails

The option you need is selected, i.e:

<%= f.date_select(:birthdate,
                  include_blank: true,
                  selected: Date.today, # substitute 18.years.ago to prefill year
                  start_year: Date.today.year - 100,
                  end_year: Date.today.year - 18) %>

The approved answer will overwrite the value already assigned to the birthdate every time you go to edit the record. See here.

If your model is, e.g., @student, and your form is form_for @student do |f|, this should work. It fails through to Date.current if @student.birthdate is empty.

<%= f.date_select(:birthdate,
                  include_blank: true,
                  selected: @student.birthdate || Date.current, # Date.current respects time_zones 
                  start_year: Date.today.year - 100,
                  end_year: Date.today.year - 18) %>

However, be aware that the blank option will always be set to the current date when you go to edit the record, requiring the user to reset to blank if the data is unknown. This risks the insertion of bad data - arguably, less usable than having to choose the date to begin with.