我有一个定义的自定义rails路由:
resources :scores, path: "seasons/:season_id/scores/:student_id"
这对我的应用程序有意义,并会保持网址标准化。这适用于节目页面,我能够正确地抓住:season_id和:student_id。
但是,当我尝试路由到任何其他页面时,我会收到错误。我希望新的和编辑页面是这些路线:
新
resources :scores, path: "seasons/:season_id/scores/:student_id/new"
修改
resources :scores, path: "seasons/:season_id/scores/:student_id/:id/edit"
所以他们仍然遵循正常的约定,这就是当我运行rake路线时会发生什么,但是击中任何路线会抛出:
ActionController::UrlGenerationError
No route matches {:action=>"show", :controller=>"scores", :format=>nil, :id=>nil, :season_id=>#<Score id: ... >, :student_id=>nil} missing required keys: [:id, :student_id]
两个帐户有点奇怪。季节ID与分数对象相关联,并且表示缺少键。所有密钥都存在于params哈希中,这就是我构建链接的方式:
= link_to "Edit", { controller: :scores, action: :edit, id: score.id, student_id: params[:student_id], season_id: params[:season_id]} , class: "btn btn-success btn-xs"
答案 0 :(得分:1)
当您需要嵌套资源时,最好不要使用resources
加path
。它更容易阅读和理解,更不容易出错,这是Rails惯例。
您可以像这样编写路线:
resources :seasons do
resources :students do
resources :scores
end
end
然后在链接中使用命名路径方法,如下所示:
link_to "Edit", edit_score_student_season_path(score, params[:student_id], params[:season_id]), class: "btn btn-success btn-xs"