在大多数情况下,您可以简单地覆盖model并忘记setupController. 有时你根本不需要覆盖任何东西。
的默认行为setupController是将控制器的model属性(别名为content属性)设置为当前路由的模型(作为参数提供)。通常这个参数是model钩子的返回值,除非路由有一个动态段并且通过{{linkTo}}、{{render}}或类似的方式访问(即不直接从 url 访问)。在这种情况下,model钩子被绕过并被setupController赋予在转换中提供的任何模型。
如果您的路线有一个动态段,则该model钩子默认情况下会猜测您要查找的内容。给定一个路由路径something/:post_id,默认model挂钩将返回App.Post.find(:post_id)。如果您的路线没有动态段(例如/posts),那么您必须覆盖model以返回您想要的记录。
如果您需要在控制器之外model或content之上设置其他属性,那么您应该覆盖setupController. 这将规避默认行为,因此您可以将模型参数分配给控制器的modelorcontent属性(或不分配)。如果您选择,您可以完全忽略模型参数并将控制器的属性设置为您喜欢的任何内容。这种方法的缺点是,由过渡到具有动态段的路由提供的模型不会在控制器上设置。