rieles que estructuran rutas / controlador / vistas para recursos anidados
Tengo una aplicación de rieles con la siguiente estructura:
user has_many posts
post has_many post_comments
post_comment has_many comment_replies
Estoy planeando usar las siguientes rutas para evitar el anidamiento profundo.
resources :posts do
resources :post_comments, module: :posts
end
resources :comments do
resources :comment_replies, module: :post_comments #is this module a good choice?
end
Esto da la siguiente estructura de controlador
post_comments GET /posts/:post_id/comments(.:format) posts/comments#index
POST /posts/:post_id/comments(.:format) posts/comments#create
new_post_comment GET /posts/:post_id/comments/new(.:format) posts/comments#new
edit_post_comment GET /posts/:post_id/comments/:id/edit(.:format) posts/comments#edit
post_comment GET /posts/:post_id/comments/:id(.:format) posts/comments#show
PATCH /posts/:post_id/comments/:id(.:format) posts/comments#update
PUT /posts/:post_id/comments/:id(.:format) posts/comments#update
DELETE /posts/:post_id/comments/:id(.:format) posts/comments#destroy
comment_repiles GET /comments/:comment_id/repiles(.:format) comments/repiles#index
POST /comments/:comment_id/repiles(.:format) comments/repiles#create
new_comment_repile GET /comments/:comment_id/repiles/new(.:format) comments/repiles#new
edit_comment_repile GET /comments/:comment_id/repiles/:id/edit(.:format) comments/repiles#edit
comment_repile GET /comments/:comment_id/repiles/:id(.:format) comments/repiles#show
PATCH /comments/:comment_id/repiles/:id(.:format) comments/repiles#update
PUT /comments/:comment_id/repiles/:id(.:format) comments/repiles#update
DELETE /comments/:comment_id/repiles/:id(.:format) comments/repiles#destroy
Mi problema es con la estructura de las carpetas.
Para los controladores: significa que puse elposts_controller
en la carpeta principal y elpost_comments_controller
entra enposts
carpeta. Hasta ahora está claro. Pero paracomment_replies
Debería ponerlo en elcomment_replies
carpeta que está totalmente separada de dondepost_comments_controller
puede ser encontrado.
Para vistas: tengo uncreate.js.erb
paraposts
en la carpeta 'post'. tengo uncreate.js.erb
parapost_comment
en elposts/post_comments
carpeta. De acuerdo con mis rutas, debería poner elcreate.js.erb
paracomment_replies
en elpost_comments/comment_replies folder
. Pero esto parece ser contraintuitivo nuevamente al igual que el ejemplo del controlador.
¿Cuál es la convención de rieles / solución común en este caso? Por cierto. No quiero mostrar comentarios o respuestas por separado de su publicación.
ACTUALIZAR
posts_controller
def index
....
@post_comments = @post.post_comments #showing all comments
@post_comment = PostComment.new #new comment via js
respond_to do |format|
format.js
end
end
controlador post_comments
def create
@post = Post.find(params[:id])
@post_comment = @post.post_comments.build(post_comment_params)
@post_comment.save!
end