我有一个概念性的rails问题。我目前正在米切尔·哈特尔著名的Rails教程(http://ruby.railstutorial.org/)上工作,我要学习第10章(哇!)。作为一个背景,微博正在创建,一个类似于twitter的状态提要正在实现。创建微型邮件时,它会出现在主页状态提要和配置文件页面中。我的问题来自于微博和feed_item对象之间的关系。在本教程中,可以通过用户的个人资料或主页的提要删除微博。问题是,微博是通过不同的部分删除的,这取决于它是用户的个人资料还是主页的提要。以下是部分内容:
对于配置文件页:
<% if current_user?(micropost.user) %>
<%= link_to "delete", micropost, method: :delete,
data: { confirm: "You sure?" },
title: micropost.content %>对于主页状态提要:
<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
endclass 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我假设从主页状态提要中删除的微博是通过micropost Controller的破坏方法发生的,但我不确定如何发生。我在主页状态提要中看到,link_ to的delete按钮具有delete方法,但它会转到feed_item url。这个feed_item网址是从哪里来的?我假设link_to知道以某种方式删除微博,因为提要的原始源来自用户模型中的一组微博,但是它怎么知道通过点击feed_item url到micropost的控制器销毁方法呢?link_to的“标题: feed_item.content”与feed_item知道删除哪个微博有什么关系吗?如果有人能帮助我理解微博、feed_item和破坏方法之间的关系,我将非常感激。谢谢!
发布于 2013-07-09 07:56:35
我可以帮助您使用DELETE方法,实际上很容易:大多数浏览器都不支持方法补丁、PUT & DELETE,因此Rails通过传递参数"_method“并在内部进行转换,从而在某种程度上欺骗了您。这就是为什么你把它看作是一个GET,直到它击中Rails内部。
您可以在这里阅读更多内容:helpers.html#how-do-forms-with-patch-put-or-delete-methods-work-questionmark
HTH
https://stackoverflow.com/questions/17542509
复制相似问题