我有一个概念性的问题。我目前正在研究Micahel Hartl着名的Rails教程(http://ruby.railstutorial.org/),我已经到了第10章(woot!)。作为一个背景,正在创建微博,并正在实施类似Twitter的状态订阅源。创建微博时,它将显示在主页状态订阅源和配置文件页面中。我的问题来自微博和feed_item对象之间的关系。在本教程中,可以通过用户的个人资料或主页的源删除微博。根据用户的个人资料或主页的提要,微博被删除不同的部分。以下是部分内容:
对于个人资料页面:
<% if current_user?(micropost.user) %>
<%= link_to "delete", micropost, method: :delete,
data: { confirm: "You sure?" },
title: micropost.content %>
对于主页状态Feed:
<li id="<%= feed_item.id %>">
<span class="user">
<%= link_to feed_item.user.name, feed_item.user %>
</span>
<span class="content"><%= feed_item.content %></span>
<span class="timestamp">
Posted <%= time_ago_in_words(feed_item.created_at) %> ago.
</span>
<% if current_user?(feed_item.user) %>
<%= link_to "delete", feed_item, method: :delete,
data: { confirm: "You sure?" },
title: feed_item.content %>
<% end %>
</li>
以下是控制器,视图和模型:
class StaticPagesController < ApplicationController
def home
if signed_in?
@micropost = current_user.microposts.build
@feed_items = current_user.feed.paginate(page: params[:page])
end
end
end
class User < ActiveRecord::Base
...
has_many :microposts, dependent: :destroy
....
def feed
Micropost.where("user_id = ?", id)
end
...
end
class MicropostsController < ApplicationController
before_action :signed_in_user, only: [:create, :destroy]
before_action :correct_user, only: :destroy
..
def destroy
@micropost.destroy
redirect_to root_url
end
...
end
我认为从主页状态提要中删除的微博是通过Microposts Controller的destroy方法发生的,但我不确定如何。我在主页状态提示中看到link_to的删除按钮具有删除方法,但它会转到feed_item网址。这个feed_item网址来自哪里?我假设link_to知道以某种方式删除微博,因为Feed的原始来源来自用户模型中的微博数组,但是如何知道通过点击feed_item url转到Micropost的控制器销毁方法? link_to“title:feed_item.content”是否与feed_item有关,知道要删除哪个微博?如果有人能帮我理解微博,feed_item和destroy方法之间的关系,我将非常感激。谢谢!
答案 0 :(得分:0)
我可以用DELETE方法帮助你,实际上很容易:大多数浏览器都不支持PATCH,PUT和&amp;删除所以Rails通过参数“_method”并在内部转换来欺骗。这就是为什么你把它视为GET,直到它击中Rails内部。
您可以在这里阅读更多内容: http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch-put-or-delete-methods-work-questionmark
HTH