【问题标题】:How to create a delete link for a related object in Ruby on Rails?如何在 Ruby on Rails 中为相关对象创建删除链接?
【发布时间】:2016-11-30 04:48:28
【问题描述】:

假设我有帖子和评论,显示的网址是/posts/1/comments/1。我想创建一个链接以删除 cmets 控制器销毁方法中的该注释。我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby hyperlink


    【解决方案1】:
    <%= link_to 'Destroy', post_comment_path(@post, comment),
                data: {:confirm => 'Are you sure?'}, :method => :delete %>
    

    在 cmets 控制器中:

      def destroy
        @post = Post.find(params[:post_id])
        @comment = Comment.find(params[:id])
        @comment.destroy
    
        respond_to do |format|
          format.html { redirect_to post_comments_path(@post) }
          format.xml  { head :ok }
        end
      end
    

    【讨论】:

    • 您还必须确保您的标题中有 或类似的标签。否则链接会在那里,但不会尊重 :method => :delete。刚刚添加此评论,因为这让我刚才感到难过....
    • 快速说明:javascript_include_tag :all 在 Rails > 3.1 中被弃用,应用程序布局默认使用 = javascript_include_tag "application",这将完成同样的事情
    • 我遇到了一个问题,我的 AJAX 链接将用户注销。我最终不得不在布局中包含 CSRF 标签。更多信息在这里:stackoverflow.com/questions/6434283/…这与这个实际问题并不完全相关,但有些人可能会意外地遇到这个问题。
    • 根据以下关于“确认:您确定吗?”的答案更新您的答案包含在数据哈希中。我尝试并验证了它。它确实需要在数据哈希中。
    【解决方案2】:

    从前一段时间,confirm 选项必须包含在 data 哈希中,否则将被默默忽略:

    <%= link_to 'Destroy',  post_comment_path(@post, comment),
        data: { confirm: 'Are you sure?' }, method: :delete %>
    

    【讨论】:

      【解决方案3】:

      有时当您在&lt;a&gt; 标记内有&lt;span&gt;&lt;i&gt; 或嵌套元素时,使用这种方式link_to 很困难。您可以插入使用易于处理的原始 HTML,如下所示:

      <a class="btn btn-sm" href="/blogs/<%=@blog.id%>" data-method="delete">             
        <i class="pg-trash"></i><span class="bold">Delete</span>
      </a>
      

      【讨论】:

      • 在这些情况下,您仍然可以使用 link_to,方法是传递一个块来定义链接名称: 删除
      猜你喜欢
      • 1970-01-01
      • 2014-05-29
      • 2011-01-08
      • 2014-03-07
      • 2016-06-11
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2015-05-03
      相关资源
      最近更新 更多