ruby-on-rails-3 - Rails 3-嵌套资源和多态路径: OK to two levels,但在三处中断

标签 ruby-on-rails-3 polymorphic-associations belongs-to nested-routes

我正在尝试使用一个简单的家庭聚会站点:“帖子”,“家庭”,“ child ”和“图片”。理想情况下,我希望以这种方式构造路线/关系:

  resources :posts do
    resources :pictures
  end

  resources :fams do
     resources :pictures
     resources :kids do
       resources :pictures
     end
  end

在模型中,我在belongs_tohas_many之间设置了必要的“fams”和“kids”关系。 Famskidsposts都用“"has_many :pictures, :as => :imageable”定义,而图片定义为:belongs_to :imageable, :polymorphic => true
当尝试在link_to "Edit" View 中执行link_to "Destroy"pictures时,我遇到了各种_path问题。 polymoric_pathposts-picturesfams-pictures的两个级别上都可以正常工作,但是无法处理fams-kids-pictures的三个级别的情况。我猜想它不是设计来处理imageable对象上方的“picture”对象的两个级别的。另一个问题是,在一种情况下,pictures Controller 必须处理“一个级别”的资源嵌套情况,而在另一个情况下,它必须处理“两个级别”的情况。不知道如何解决这个问题。

我尝试过的一件事是,按照Ruby Guides的指示,嵌套的资源不能超过一层。我这样构造它们:
  resources :posts do
    resources :pictures
  end

  resources :fams do
     resources :pictures
     resources :kids
  end

  resources :kids do
     resources :pictures
  end

由于不再保留“亲子关系”,这导致了另一组路径问题。我也无法使polymorphic_path在所有不同的picture View 中正常运行。

所以这是我的主要问题:是否有人知道一个Rails 3示例/教程,其中嵌套资源,belongs-to/has_many和多态关系都放在一起,尤其是在大多数情况下,不仅仅是简单的两级关系例子显示? (由于我缺乏Rails的历史经验,因此我在这些领域中发现的Rails和Rails 2示例相当令人困惑。)

或者有人可以告诉我如何在link_to EDIT Controller 中为link_to DELETE View 构造pictureredirect-to语句,以及为我的createupdatedestroy方法构造pictures语句?

谢谢!

最佳答案

您将嵌套限制为2级的代码示例非常接近答案。为了避免fams-> kids和kids的重复路线,可以将:only选项与一个空白数组一起使用,以便第一级 child 将不会生成路线,除非在kids-> pictures的上下文中,如下所示:

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

对于上面的代码,您可以使用以下代码来构造多态编辑网址:
polymorphic_url([fam, picture], action: :edit) # using Ruby 1.9 hash syntax
polymorphic_url([kid, picture], action: :edit)

关于ruby-on-rails-3 - Rails 3-嵌套资源和多态路径: OK to two levels,但在三处中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5918345/

相关文章:

ruby-on-rails - has_one 是否没有提供 `create_child` 方法?

ruby-on-rails-3 - Accepts_nested_attributes_for 是否可以与Belongs_to一起使用?

ruby-on-rails - Rails 范围 - 如何连接 3 个表

ruby-on-rails-3 - 带有JSON的Rails 3 RESTful Web服务

mysql - 如何处理关系数据库中的金融交易?

mysql - 尝试避免多态关联

SQL 'belong to'逻辑

ruby-on-rails-3 - 在 Rails find/where 中传递多态查找参数的对象

ruby-on-rails - Capistrano 部署 :migrate and db:migrate run all migrations every time

ruby-on-rails - 在哪里放置 Rails 种子数据