Это требует 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 параметра для: действия удалить
спасибо за подробное объяснение! Извините, что не уточнил вопрос, но я пытался выяснить, почему это comment.post, а не post.comment. Поскольку комментарии вложены внутри сообщений, я предположил, что это был post.comment, и не мог понять, почему это было неправильно, до тех пор, пока не появится много googling. Есть ли причина, или это просто конвенция? – user3277633
Если вы проверяете маршруты (т. Е. Вложенные маршруты), вам нужно иметь как комментарий, так и сообщение, поэтому вам нужно передать «comment.post», потому что у вас нет объекта post для вашего представления. –
ах я вижу! благодаря!! – user3277633