Ruby on Rails 3 - "link_to"的问题



新编辑

routes.rb resources :cases后,所有这些路由帮助程序都按预期工作(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,

似乎轨道不会自动从参数中获取 :area。我可以解决这个问题,强制该区域创建链接

link_to("Show this case", case_path(params[:area], @item))

获取链接

example.com/area1/cases/3

但我真的不喜欢它。我做错了什么吗?为什么导轨带来了控制器和动作,却忘记了该区域?

试试这个

link_to "Show this case", [:area, @case]

编辑(删除冒号)

scope "/area" do
  resources :cases
end

编辑 2

link_to "Show this case", case_path(@case, :area => :en)

如果将area指定为参数,则应始终传递它。

将此方法添加到应用程序控制器:

def default_url_options(options={})
  {:area => params[:area]}
end

然后,您不必在路由帮助程序中手动设置 :area 选项

相关内容

  • 没有找到相关文章

最新更新