gpt4 book ai didi

ruby-on-rails - Ruby on Rails link_to 对 n00b 的解释?

转载 作者:数据小太阳 更新时间:2023-10-29 08:47:53 26 4
gpt4 key购买 nike

  1. 我正在做一个 Rails 博客教程,但不完全理解以下 link_to 代码

    <%= link_to 'Destroy Comment', [comment.post, comment],
    method: :delete,
    data: { confirm: 'Are you sure?' } %>

    为什么我必须使用:

    [comment.post, comment] 

    为什么我不能写:

    @post.comment
  2. 我的第二个相关问题是,因为我在 Controller 中创建了“销毁”操作,如下所示:

    def destroy
    @post = Post.find(params[:post_id])
    @comment = @post.comments.find(params[:id])
    @comment.destroy
    redirect_to post_path(@post)

    结束

    为什么我不必在 link_to 代码中提及“destroy”?

    <%= link_to 'Destroy Comment', [comment.post, comment],
    method: :delete,
    data: { confirm: 'Are you sure?' } %>

最佳答案

您必须向 link_to 帮助器同时提供 Post 对象和 Comment 的原因是因为 Comment 是 Post 中的嵌套资源,必须知道这两个 ID 才能构造 URL。它实际上等同于:

link_to '销毁评论', post_comment_path(comment.post, comment), ...

它正在做的是使用 url_for 为您解析路径助手。参见 http://guides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects .

您不必在 link_to 中提及 destroy,因为 destroy 是操作的名称。您的路由文件概述了哪些 Controller 和操作与哪些路由相关联。

我假设您正在使用足智多谋的路由,这是为所有 CRUD 操作定义路由的简写方式。参见 http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions用于 HTTP 谓词和 Controller 操作之间的映射。您会看到 delete 被映射到 destroy,并且您在 link_to 上使用了 method: :delete >.

关于ruby-on-rails - Ruby on Rails link_to 对 n00b 的解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21989900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com