title: RSpec not seeing changes to ActiveRecord object with `change(object, :message)` syntax
body: <p>I have three models:</p>
  
  <ul>
  <li><code>User</code></li>
  <li><code>Company</code></li>
  <li><code>Commitment</code></li>
  </ul>
  
  <p><code>Commitment</code> is a HABTM join table for <code>Users</code> and <code>Companies</code> (<em>i.e.,</em> when a <code>User</code> joins a <code>Company</code>, it creates a new <code>Commitment</code>). It also has a few extra columns/attributes:</p>
  
  <ul>
  <li><code>admin</code> (does the user have admin privileges for this company?)</li>
  <li><code>confirmed_by_admin</code> (has a company admin confirmed this user's request to join the company?)</li>
  <li><code>confirmed_by_member</code> (has the user himself confirmed an invitation to join the company?)</li>
  </ul>
  
  <p>I've also defined a convenience method to quickly determine if a commitment is fully confirmed:</p>
  
  <pre><code>class Commitment &lt; ApplicationRecord
    def confirmed?
      confirmed_by_admin? &amp;&amp; confirmed_by_member?
    end
  end
  </code></pre>
  
  <p>Now I'm writing a request spec, but for some reason, the <code>change</code> matcher only works with one of its two syntaxes:</p>
  
  <pre><code>let :carol   { FactoryGirl.create(:user) }
  let :company { FactoryGirl.create(:company) }
  
  it 'confirms invitation to join company' do
    # Initialize unconfirmed commitment
    FactoryGirl.create(:commitment, user: carol,
                                    company: company,
                                    confirmed_by_admin: true)
  
    expect do
      patch commitment_path(carol.commitments.first),
            params: { commitment: { confirmed_by_member: true } }
  
    # for the following syntaxes, ------------------------------------------------
    # this works:
    end.to change { carol.commitments.first.confirmed?) }.from(false).to(true)
    # and this fails:
    end.to change(carol.commitments.first, :confirmed?).from(false).to(true)
    # ----------------------------------------------------------------------------
  
  end
  </code></pre>
  
  <p>It appears that <code>carol.commitments.first</code> isn't being reloaded when RSpec tests for the change — I get the following test output:</p>
  
  <pre><code>Failure/Error:
    expect do
      patch commitment_path(carol.commitments.first),
            params: { commitment: { confirmed_by_member: true } }
    end.to change(Commitment.find_by(user: carol, company: company), :confirmed?).from(false).to(true)
  
    expected #confirmed? to have changed from false to true, but did not change
  # ./spec/requests/commitments_spec.rb:69:in `block (3 levels) in &lt;top (required)&gt;'
  </code></pre>
  
  <p>What gives? Clearly I can just stick to the curly-brace / block syntax, but I'd like to understand why one works and not the other.</p>