在大多数情况下,您可以简单地覆盖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
. 这将规避默认行为,因此您可以将模型参数分配给控制器的model
orcontent
属性(或不分配)。如果您选择,您可以完全忽略模型参数并将控制器的属性设置为您喜欢的任何内容。这种方法的缺点是,由过渡到具有动态段的路由提供的模型不会在控制器上设置。