新编辑
在所有这些路由助手resources :cases
中routes.rb
都按预期工作(c 是模型案例的一个实例):
cases_path # Index action
new_case_path # New action
case_path(c) # Show action
edit_case_path(c) # Edit action
更改routes.rb
为:
scope "/:area" do
resources :cases
end
两个路由助手失败(见下面的错误):
cases_path # OK
new_case_path # OK
case_path(c) # Fail
edit_case_path(c) # Fail
为了使它起作用,我需要更改最后两个助手:
cases_path # OK
new_case_path # OK
case_path(c, :area => params[:area]) # OK
edit_case_path(c, :area => params[:area]) # OK
为什么不需要给前两个助手提供 :area 而需要后两个?它使代码混乱......
老问题
最初我有这个 routes.rb:
resources :cases
我可以生成这种类型的链接
example.com/cases/3
显示 ID = 3 的情况:
link_to("Show this case", @case)
然后我将 routes.rb 修改为:
scope "/:area" do
resources :cases
end
结束上面的link_to给我错误
No route matches {:action=>"show", :controller=>"cases", :area=>#<Case id: 2,
似乎 rails 不会自动从参数中获取 :area 。我可以解决这个问题,迫使该区域创建一个链接
link_to("Show this case", case_path(params[:area], @item))
获取链接到
example.com/area1/cases/3
但我真的不喜欢它。难道我做错了什么?为什么 Rails 会带来控制器和动作,却忘记了该区域?