我有3个资源。
Projects
Books
Chapters
Projects
和Books
通过ProjectBooks
,Books
has_many Chapters
,即Books
属于/projects/1
。
我可以轻松设置/books/2
和/chapters/3
以及Books
的基本路线。
如何仅列出附加到给定项目的Books
?如何添加与Project
相关的/books/2
的信息?
因此,我的路线应该是:
/projects/1
- show book 2 /projects/1/books
- show project 1 /projects/1/books/2/chapters
- 列出项目1中的书籍和其他信息books
- 有关项目1的第2册中的章节的信息我原来的想法是ProjectsController
上使用resources :projects do
get :books, on: :member
end
方法的自定义路线。路由:
/projects/1/books/2/chapters
但这并不能让我得到resources :projects, param: :name do
resources :books do
resources :chapters
end
end
。
然后我考虑了嵌入式资源:
projects#books
哪个有效,但不是调用books#index
,而是调用#chapters
,它真正列出了所有图书,并且无法让我在项目的上下文中获得Books
。
我如何应对以下双重挑战:
Project
可以单独列出,也可以在Project
ProjectsController
编辑:
我的假设是只有Books
可以发现哪个ProjectsController
是此项目的一部分,当然只有Project
知道如何添加class Plan < ActiveRecord::Base
belongs_to :patient
has_many :structures,dependent: :destroy
end
########
class Structure < ActiveRecord::Base
belongs_to :plan
end
- 特定数据,如统计数据。如果我的假设是关闭的,并且有一种不同的方式来构建它,那就是它。
答案 0 :(得分:0)
这是一个想法:
您可以执行类似
的操作match '/books/:book_id/chapters' => 'projects#chapters'
第一种方法(将所有内容都放在一个ProjectController
)
更多信息位于Rails Guide on Routing。
编辑(OP):我使用了你的答案并做了一个小小的变体:
resources :projects do
member do
get 'books', to: 'projects#books'
get 'books/:book_id/chapters', to: 'projects#chapters'
get 'books/:book_id/chapters/:chapter_id/units', to: 'projects#units'
end
end
将其放在:projects
资源中使其更易于管理。