Я делаю учебник в Rails блога и не в полной мере понять следующее LINK_TO кодRuby on Rails link_to объяснение для n00b?
<%= link_to 'Destroy Comment', [comment.post, comment], method: :delete, data: { confirm: 'Are you sure?' } %>
Почему я должен использовать:
[comment.post, comment]
и почему я не могу просто написать:
@post.comment
Мой второй, связанный, вопрос заключается в том, что, так как я создал действие «уничтожить» в контроллере следующим образом:
def destroy @post = Post.find(params[:post_id]) @comment = @post.comments.find(params[:id]) @comment.destroy redirect_to post_path(@post)
конец
Почему я не должен упомянуть «уничтожить» в коде link_to?
<%= link_to 'Destroy Comment', [comment.post, comment], method: :delete, data: { confirm: 'Are you sure?' } %>
ответ
Причина, почему вы должны поставить как объект Post и Комментарий к помощнику link_to потому, что комментарий является вложенной ресурс в сообщении, и оба идентификаторы должны быть известны для построения URL , Это на самом деле эквивалентно:
link_to 'Destroy Comment', post_comment_path(comment.post, comment), ...
Что это делает, это разрешение помощника пути для вас, используя url_for
. См. http://guides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects.
Вы не должны упоминать уничтожение в своем link_to
, потому что уничтожение - это имя действия. В вашем файле маршрутов указывается, какие контроллеры и действия связаны с маршрутами.
Я предполагаю, что вы используете находчивую маршрутизацию, которая является сокращенным способом определения маршрутов для всех действий CRUD. См. http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions для сопоставления между HTTP-глаголом и действием контроллера. Вы увидите, что delete
сопоставляется с destroy
, и вы используете method: :delete
на своем link_to
.
Таким образом, здесь многое происходит.
1) Мое предположение, что link_to
в первой части находится внутри цикла. Это правда? Это было бы что-то вроде @post.comments.each do |comment|
. Если это так, то вероятность того, что происходит, у вас есть комментарии, вложенные в сообщения. Эта документация может быть найдена here. Скобки должны идентифицировать комментарий, для которого вам нужен идентификатор post
. Возможно, вы также можете сделать [@post, comment]
, что будет работать так же хорошо. Вы не можете просто написать @post.comment
, потому что недостаточно информации для определения правильного комментария.
2) Rails принимает HTTP-глаголы, чтобы определить, какое действие вызывать с контроллера. Вы отправляете запрос HTTP DELETE на /posts/:post_id/comments/:id
, который затем определяет файл маршрутов, который принадлежит контроллеру комментариев. Эта документация может быть найдена here и here.
- 1. custom link_to - ruby on rails
- 2. Ruby on Rails: link_to javascript
- 3. Ruby on rails link_to синтаксис
- 4. Link_to in Ruby on Rails
- 5. Ruby on Rails добавить подтверждение для link_to
- 6. counter on link_to ruby on rails
- 7. Ruby on Rails - link_to с круглыми скобками
- 8. Ruby on Rails - Передача значений на link_to
- 9. Ruby on rails raw tag внутри link_to
- 10. Ruby on Rails link_to undefined method
- 11. Ruby on Rails - link_to с тегом filter
- 12. Ruby on Rails link_to With put Метод
- 13. Ruby on Rails добавить путь в link_to?
- 14. Ruby on Rails - link_to button/css
- 15. Ruby on Rails link_to неправильная цель?
- 16. Ruby On Rails: использование массивов с link_to
- 17. Рефакторинг Ruby on Rails link_to с сортировкой
- 18. ajax, link_to remote in ruby on rails
- 19. узнать link_to на Ruby On Rails
- 20. OO PHP-объяснение Для braindead n00b
- 21. Методы с link_to В тегах ruby (ruby on rails)
- 22. ruby on rails error для ссылки меню навигации, используя «% link_to»
- 23. Ruby on Rails UrlGenerationError
- 24. Объяснение для откатов при использовании @ photo.valid? в Ruby on Rails
- 25. Friendly_ID Ruby on Rails
- 26. Ruby on Rails Pagination
- 27. Ruby On Rails Дорожки
- 28. Локализация Ruby on Rails
- 29. Ruby on Rails route
- 30. Ruby On Rails Application.html.haml