在大多数情况下,你可以简单地覆盖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
或content
属性(或不是)。如果你这样选择,你可以完全忽略模型参数,并将控制器的属性设置为任何你喜欢的。这种方法的缺点是,通过转换到具有动态段的路线提供的模型不会在控制器上设置。