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”。
虽然我真的不知道如何解决这个问题,但现在我的计划是在链接嵌套资源的章节创建页上放置一个关联(?)表单。
问题是,我对web开发非常陌生,我不确定我是否正在接近这个权利。 我将如何把一个表单发送:book_id到章节控制器? 这种方法可以工作吗? 是否有更有效的方法去实现它?
我意识到我的问题可能有点模糊,但任何帮助将不胜感激!
无聊的答案是:你的建议只对嵌套路线没有意义。
嵌套路线意味着在访问chapters#new
动作时,您已经确切知道哪本书应该包含该章节。
但在光明的一面:您可以同时使用嵌套和非嵌套路线。
如果您想保留嵌套路线,但也提供new
和create
操作,让用户为章节选择所需的书籍,则可以为章节创建添加非嵌套路线。
例如:
resources :books do
resources :chapters
end
resources :chapters
请注意,您的控制器可能需要重写一下才能适应双路径。
如果你愿意,你可以在同一页面创建两个资源。 查找accepts_nested_attributes_for
来做到这一点。 一旦你掌握了它,这真的很容易。