Rails在单独的页面上嵌套资源创建

时间:2013-02-23 21:49:58

标签: ruby-on-rails

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”。

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

问题是,我是网络开发的新手,我不确定我是否正在接近这个权利。我如何将一个表单发送:book_id到章节控制器?这种方法会起作用吗?有更有效的方法吗?

我意识到我的问题可能有点模糊,但任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:1)

沉闷的回答是:只有嵌套路线,你的建议才有意义。

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

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

如果要保留嵌套路由,还提供允许用户为章节选择所需Book的newcreate操作,则可以为章节添加非嵌套路由创建。

例如:

resources :books do
  resources :chapters
end
resources :chapters

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

如果需要,您可以在同一页面中创建两个资源。查找accepts_nested_attributes_for来做到这一点。一旦掌握了它,这真的很容易。