0
resources :books do 
    resources :chapters
end

假设我有上述正确嵌套的资源。我想创建一个页面来创建父书资源和另一个页面来创建章节资源。创建章节时,我希望用户能够选择他们创建的父书。

现在我有...

protected
def find_book
    @book = Book.find(params[:book_id])
end

...在章节控制器中,但我相信这仅在 URL 中已经存在书籍 ID 时才有效。因此,要创建新章节,当我希望能够在单独的页面上创建章节时,我必须访问“rootpath/book/book_id/chapter/new”。

虽然我真的不确定如何解决这个问题,但现在我的计划是在链接嵌套资源的章节创建页面上放置一个关联(?)表单。

问题是,我对 Web 开发真的很陌生,我不确定我是否完全正确地处理了这个问题。我将如何放置一个将 :book_id 发送到章节控制器的表单?这种方法会奏效吗?有更有效的方法吗?

我意识到我的问题可能有点含糊,但任何帮助将不胜感激!

4

1 回答 1

1

枯燥的答案是:您的提议仅对嵌套路由没有意义。

嵌套路由意味着在访问chapters#new操作时,您已经确切知道哪本书应该包含该章节。

但好的一面是:您可以同时使用嵌套和非嵌套路由。

如果您想保留嵌套路由,但还提供一个newcreate操作让用户为章节选择所需的书,您可以为章节创建添加非嵌套路由。

例如:

resources :books do
  resources :chapters
end
resources :chapters

请注意,您的控制器可能需要稍微重写以适应双路由。

如果需要,您可以在同一页面中创建这两个资源。抬头accepts_nested_attributes_for做那件事。这真的很容易,一旦你掌握了窍门。

于 2013-02-23T22:36:16.967 回答