2013-07-09 105 views
0

我有一個概念性的rails問題。我目前正在Micahel Hartl着名的Rails教程(http://ruby.railstutorial.org/)上工作,而我正在學習第10章(woot!)。作爲一種背景,微博正在創建,並且像狀態饋送這樣的推特正在被實施。創建微博時,它會顯示在主頁狀態源和配置文件頁面中。我的問題來自microposts和feed_item對象之間的關係。在教程中,可以通過用戶的配置文件或主頁的提要刪除微博。事情是microposts被刪除通過不同的部分取決於它的用戶的個人資料或主頁的飼料。以下是諧音:Michael Hartl的Rails教程第10章破壞方法

對於個人資料頁:

<% 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 

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 

假設我正在微柱從主頁狀態供稿刪除通過微柱控制器的破壞方法發生,但我不知道該如何。我在主頁狀態提要中看到,link_to的刪除按鈕具有刪除方法,但它會轉到feed_item網址。這個feed_item網址來自哪裏?我假設link_to知道某種方式刪除micropost,因爲feed的源代碼來自用戶模型中的一個微博陣列,但它如何知道通過點擊feed_item url轉到Micropost的控制器銷燬方法? link_to「title:feed_item.content」與feed_item有什麼關係可以刪除哪個micropost?如果有人能幫我理解micropost,feed_item和destroy方法之間的關係,我會非常感激。謝謝!

回答

0

我可以幫你使用DELETE方法,事實上它很容易:大多數瀏覽器不支持方法PATCH,PUT & DELETE使Rails以一種方式欺騙,通過參數「_method」並在內部進行轉換。這就是爲什麼你將它看作GET,直到它碰到Rails內部。

你可以在這裏閱讀更多: http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch-put-or-delete-methods-work-questionmark

HTH

+0

啊,這是有道理的。感謝Adnan!現在對於feed_item ....這就是真正的bug :)微博,feed_item和destroy方法之間的組合/關係是令人困惑的事情。 – guy8214

相關問題