2015-05-11 3 views
0

В следующем фрагменте кодаРедактировать вложенный ресурс в рельсах

.comment 
    %p= comment.comment 
    %p= comment.user.email 

    = link_to 'Edit', edit_post_comment_path(comment.post, comment) 
    = link_to "Delete", [comment.post, comment], method: :delete, data: {confirm: 'Are you sure"'} 

почему и Edit и Удалить взять в comment.post в качестве параметра? Что это значит?

ответ

2

Это требует comment.post, потому что вы сделали вложенные маршруты, проверьте routes.rb файл, где вы должны определить маршруты, как показано ниже:

resources :posts do 
    resources :comments 
end 

и ваши маршруты для редактирования и удаления является

edit_post_comment GET /posts/:post_id/comments/:id/edit(.:format) comments#edit  

DELETE /posts/:post_id/comments/:id(.:format) comments#destroy 

Именно поэтому вам всегда нужно передать comment.post в качестве параметра.

Если вы не хотите comment.post в качестве параметра вы можете изменить свои маршруты как:

resources :posts 
resources :comments 

ИЛИ если вы не, т хочет передать comment.id в какой-либо конкретной акции сделать ваши маршруты в

resources :posts do 
    resources :comments, :except => [:delete] 
end 

resources :comments, :only => [:delete] 

ПРИМЕЧАНИЯ: Я предполагаю, что вы не хотите comment.post параметра для: действия удалить

+0

спасибо за подробное объяснение! Извините, что не уточнил вопрос, но я пытался выяснить, почему это comment.post, а не post.comment. Поскольку комментарии вложены внутри сообщений, я предположил, что это был post.comment, и не мог понять, почему это было неправильно, до тех пор, пока не появится много googling. Есть ли причина, или это просто конвенция? – user3277633

+0

Если вы проверяете маршруты (т. Е. Вложенные маршруты), вам нужно иметь как комментарий, так и сообщение, поэтому вам нужно передать «comment.post», потому что у вас нет объекта post для вашего представления. –

+0

ах я вижу! благодаря!! – user3277633

0

Комментарий - это вложенный ресурс здесь, что означает, что комментарии принадлежат сообщению. Поскольку маршруты рельсов определены в RESTFUL Путь.

Если вы видите путь RESTful, для всех операций CRUD в ресурсе комментариев требуется идентификатор ресурса сообщения, поскольку комментарий связан с сообщением.

Не только для операции «Редактировать» и «Удалить» требуется идентификатор родительского ресурса, для этого требуется вся операция CRUD.

Посмотрите here в разделе Вложенные ресурсы.

Смежные вопросы