我正在尝试使用一个简单的家庭聚会站点:“帖子”,“家庭”,“ child ”和“图片”。理想情况下,我希望以这种方式构造路线/关系:
resources :posts do
resources :pictures
end
resources :fams do
resources :pictures
resources :kids do
resources :pictures
end
end
在模型中,我在
belongs_to
和has_many
之间设置了必要的“fams
”和“kids
”关系。 Fams
,kids
和posts
都用“"has_many :pictures, :as => :imageable
”定义,而图片定义为:belongs_to :imageable, :polymorphic => true
当尝试在
link_to "Edit"
View 中执行link_to "Destroy"
和pictures
时,我遇到了各种_path
问题。 polymoric_path
在posts-pictures
和fams-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 构造picture
和redirect-to
语句,以及为我的create
,update
和destroy
方法构造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/