Rails 3 - 嵌套资源和多态路径:好到两个级别,但是在三个级别中断

Don*_*ham 9 polymorphic-associations belongs-to nested-routes ruby-on-rails-3

我正在尝试用一个简单的家庭聚会网站:"帖子","家庭","孩子"和"图片".理想情况下,我希望以这种方式构建路由/关系:

  resources :posts do
    resources :pictures
  end

  resources :fams do
     resources :pictures
     resources :kids do
       resources :pictures
     end
  end
Run Code Online (Sandbox Code Playgroud)

在模型中我有必要的" belongs_to"和" has_many"之间设置的关系famskids. Fams,kidsposts所有都定义为"has_many :pictures, :as => :imageable"而图片定义为:belongs_to :imageable, :polymorphic => true

在尝试做link_to "Edit"link_to "Destroy"pictures视图中我遇到各种各样的_path问题. polymoric_path在两个级别上工作正常,即for posts-picturesfams-pictures但它无法处理三级情况fams-kids-pictures.我猜它不是为了处理imageable对象上方的两个" "对象而设计的picture.另一个问题是,在一个实例中,pictures控制器必须处理"一级"资源嵌套情况,而在另一个实例中,它必须处理"两级"情况.不知道如何处理这个问题.

我尝试过的一件事就是根据Ruby Guides的指示,不要将资源嵌套到一个以上.我把它们组织成这样:

  resources :posts do
    resources :pictures
  end

  resources :fams do
     resources :pictures
     resources :kids
  end

  resources :kids do
     resources :pictures
  end
Run Code Online (Sandbox Code Playgroud)

这引起了另一组路径问题,因为不再保留与孩子之间的关系.我也无法让polymorphic_path在所有不同的picture视图中正确运行.

所以这是我的主要问题:有没有人知道Rails 3示例/教程,其中嵌套资源,属于/ has_many和多态关系都被放在一起,特别是在它不仅仅是简单的两级关系的情况下例子显示?(我对Rails相当新,我在这些领域发现的Rails 2例子因为我缺乏Rails的历史经验而令人困惑.)

或者有人可以告诉我如何结构link_to EDITlink_to DELETE语句对我picture的看法,还有redirect-to对我的发言create,update以及destroy在我的方法pictures控制?

谢谢!

mik*_*ong 7

您的嵌套限制为2级的代码示例非常接近答案.为避免fams-> kids和kids的重复路由,您可以使用:only选项和空白数组,以便第1级孩子不会生成路线,除了在孩子 - >图片的上下文中,如下所示:

resources :posts do
  resources :pictures
end

resources :fams do
  resources :pictures
  resources :kids
end

resources :kids, only: [] do # this will not generate kids routes
   resources :pictures
end
Run Code Online (Sandbox Code Playgroud)

对于上面的代码,您可以使用以下内容构建多态编辑URL:

polymorphic_url([fam, picture], action: :edit) # using Ruby 1.9 hash syntax
polymorphic_url([kid, picture], action: :edit)
Run Code Online (Sandbox Code Playgroud)