title: Why is this Route's model updated in only 2 of 3 cases? - Ember.js 2.3
body: <p>I'm using Ember.js 2.3. I have a parent <code>Route</code> that looks like this:</p>
  
  <pre><code>App.AppRoute = Ember.Route.extend
    model: -&gt;
      Ember.RSVP.hash
        projects: @store.findAll "project"
        clients: @store.findAll "client"
        consultants: @store.findAll "consultant"
        practiceAreas: @store.findAll("practice_area").then (practice_areas) -&gt;
          practice_areas.sortBy "displayName"
  </code></pre>
  
  <p>I have a child <code>Route</code> looking like:</p>
  
  <pre><code>App.AppProjectRoute = Ember.Route.extend
    model: (params) -&gt;
      hash = @modelFor "app"
      hash["project"] = @store.findRecord "project", params.project_id
        .then (p) -&gt; p
      hash["workWeeks"] = @store.query "work-week", project_id: params.project_id
        .then (weeks) -&gt; weeks
      console.log _.keys hash
      Ember.RSVP.hash hash
  </code></pre>
  
  <p>The template for the child <code>Route</code> contains:</p>
  
  <pre><code>  &lt;hr/&gt;
    {{add-consultant project=model.project consultants=model.consultants addConsultant="didAddConsultant"}}
  &lt;/div&gt;
  </code></pre>
  
  <p>Then the <code>add-consultant</code> component contains a computed property:</p>
  
  <pre><code>remainingConsultants: Ember.computed "project", "project.consultants.[]", "consultants.[]", -&gt;
    already_involved = @get "project.consultants"
    remaining        = @get "consultants"
  
    already_involved.forEach (ai) -&gt;
      remaining = remaining.reject (r) -&gt; r.get("id") is ai.get("id")
  
    remaining.sortBy "displayName"
  </code></pre>
  
  <hr>
  
  <h2>Case 1</h2>
  
  <p>When I navigate directly to a project, such as <code>http://localhost/#/app/project/27</code>, the <code>Route</code>s <code>model</code> hook correctly queries the server for data and renders the template and components.</p>
  
  <h2>Case 2</h2>
  
  <p>When I navigate directly to a project, then manually change the project ID in the URL (say from <code>http://localhost/#/app/project/27</code> to <code>http://localhost/#/app/project/28</code> and press <code>Enter</code>, the <code>Route</code> <code>model</code> hooks update, and the template and components are correctly rerendered.</p>
  
  <h2>Case 3</h2>
  
  <p>However - and this is my confusion - navigating to a project by clicking a link (say, from a list of Projects using the <code>{#link-to}</code> helper) - even if I first visit the page sucessfully as in Case 1 or Case 2 and then immediately navigate back to the same Project, I get an error:</p>
  
  <pre><code>TypeError: already_involved is undefined
  </code></pre>
  
  <p>Looking deeper, it turns out that <code>@get "project"</code> itself is undefined.</p>
  
  <p>What is different about using <code>{#link-to}</code> over "direct" navigation that causes this? Is it an error I made in defining my Route model heirarchy? Am I missing some kind of event hook?</p>
  
  <hr>
  
  <p><strong>EDIT 1:</strong> If there's a smarter or more idiomatic way to define these types of hierarchical <code>model</code> hooks maybe that would obviate this issue?</p>
  
  <p><strong>EDIT 2:</strong> The <code>Router</code>:</p>
  
  <pre><code>this.route "app", -&gt;
    this.route "projects"
    this.route "project", path: "/project/:project_id"
  </code></pre>