如何创建智能嵌套链接?

时间:2011-01-25 00:54:33

标签: ruby-on-rails ruby-on-rails-3 routing

路由

中的

     resources :departments do
       resources :buildings do
         resources :halls do
       end
       resources :chairs do
         resources :buildings do
           resources :halls do
         end
       end
     end

我想在buildingshalls之间分享chairsdepartments的相同观点。我正在考虑以这种方式在视图中创建url:

link_to "Show", [@department, @chair, @building, @hall].compact

如果@chair不存在,则会nil,因此上层链接会生成:

link_to "Show", [@department, @building, @hall]

如果存在@chair

link_to "Show", [@department, @chair, @building, @hall]

我的问题是:如何创建这种方式网址到editnew行动?或者这种嵌套资源可能存在更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

我有一个应用程序,我们可以深入嵌套三个最多四个资源。一个例子是联系人的管理。我们有公司,位置和联系模式。

通常,您可以使用new_department_chair_building_path(@department,@chair)访问新路径和编辑路径。

不要忘记在新建筑的表格中包含您的前辈(deparment,chair)中隐藏的ID。

在您的建筑控制器中,您必须根据上下文过滤掉要加载的对象。我们这样做

# Company controller
def index
  if params[:project]
    @project = ....
  end
end

可能有更好的方法可以做到这一点,但我们还没有找到任何方法。

在视图中,我们检查@project,然后渲染部分内容。

我希望这对你有所帮助。

干杯,

答案 1 :(得分:0)

您也可以在数组中粘贴符号。所以像这样:

link_to "Edit", [:edit, @department, @chair, @building, @hall]