ruby-on-rails – Rails命名空间与嵌套资源
假设我的应用有两个模型,Foo和Bar.
可以选择belongs_to吧. 现在我可以看一个单一的Foo,或者搜索一个特定的Foo,而FoosController可以处理所有这些.我的网址如下: 有时我想看一下吧. BarsController处理它,我得到它像: 如果我正在看酒吧,我可能想浏览所有那些属于该酒吧的Foos.所以,我想使用酒吧/ 1 / foos /来看这些Foos. 这是非常简单的嵌套资源,它看起来像这样: resources :foo resources :bar do resources :foo end 然而,作为酒吧一部分的Foos是特别的,与正规Foos不同.所以,例如,如果我加载foos / 1或bars / 1 / foos / 1,我会看着同样的Foo,但是我在每一种情况下专注于不同的信息. 所以我一直在想一个BarFoos控制器来处理Foos,当他们在一个酒吧的情况下.但是,如果我将BarFoos嵌入到Bar下,那么我的助手将会像bar_bar_foos_path和new_bar_bar_foo_path一样.这似乎是多余的. 所以,现在我正在考虑命名空间,这是我之前从来没有看过的.我在导轨指南中看到我可以定义: namespace "bar" do resources :foos end 如果我这样做,我可以在app / bar /下做一个FoosController,并且FoosController可以使用像bar_foo_path(:id)而不是bar_bar_foo_path(:id)的好帮手处理一个Bar里面的Foos. 但是如果我这样做,我的BarsController会发生什么?如果不是资源,请求如何路由到BarsController:bars我有命名空间“bar”? 最后还有什么特别的,我需要在我的第二个FoosController里做,以确保没有与顶级FoosController的名字冲突?我意识到路由说“命名空间”,但是其余的ruby代码如何知道app / bar / foos_controller和app / foos_controller不是同一个类? 谢谢! 解决方法
我想你想要实现的是:
>酒吧有很多Foos 您可以通过以下方式实现: resources :foos resources :bars do resources :foos,:controller => 'bars/foos' end 你最终的路线帮助者是: > bars_path 实质上,你最终得到: > app / BarsController(rails g controller bar) 在FoosController中,您将像往常一样访问foos: @foos = Foos.all 在酒吧/ FoosController中,您可以访问酒吧的foos: @foos = @bar.foos 其中bar可以在bars / foos控制器中预先检索: before_filter :get_client private def get_client @bar = Bar.find(params[:bar_id]) end 希望这可以帮助. =) 编辑: routes.rb中: namespace :admin do resources :foos end 我创建了我的控制器: rails g controller admin/foos 这设置了我的foos资源,以便我可以在“我的网站url”/ admin / foos访问它,并且还可以获得诸如admin_foos_path之类的帮助者. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |