title: Validate acceptance of terms: validate_acceptance_of succeeds if terms_accepted is nil
body: <p>When creating a user, I'm checking if the terms of usage were accepted like so:</p>
  
  <pre><code># user.rb
  class User &lt; ActiveRecord::Base
    validates_acceptance_of :terms, :message =&gt; :terms_not_accepted, :on =&gt; :create
    attr_accessible :terms, :on =&gt; :create # required because I completely disable mass-assignment in an initializer
  end
  </code></pre>
  
  <p>I have the following fields in my form view:</p>
  
  <pre><code>&lt;label class="checkbox"&gt;&lt;%= f.check_box :terms %&gt;&lt;span&gt;&lt;%=t "users.form.label.terms" %&gt;&lt;/span&gt;&lt;/label&gt;
  </code></pre>
  
  <p>So far, everything works as expected. If the user does not accept the terms, there will be an error message. <strong>However, if I just remove the checkbox (and corresponding hidden field generated by the view helper) from the HTML page using e.g. Chrome developer tools, the user will be created!</strong></p>
  
  <p>I can reproduce this in the console:</p>
  
  <pre><code>irb(main):001:0&gt; u = User.new # =&gt; #&lt;User ...&gt;
  irb(main):002:0&gt; u.terms # =&gt; nil
  irb(main):003:0&gt; u.save! # =&gt; other validations fail, but terms check succeeds!
  irb(main):004:0&gt; u.terms = false # =&gt; false
  irb(main):005:0&gt; u.save! # =&gt; terms validation fails as expected
  </code></pre>
  
  <p>One more info: <code>validates :terms, :acceptance =&gt; true</code> yields the same result</p>
  
  <p>I know that I can initialize the terms attribute with <code>false</code> in an <code>after_initialize</code> callback, but I do not want to do that since the validator should be able to handle the <code>nil</code> case. So <strong>is this a bug in rails or am I doing something wrong?</strong></p>