0

概念的なレールの質問があります。私は現在、有名な Micahel Hartl の 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

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

ホームページのステータス フィードからマイクロポストが削除されるのは、マイクロポスト コントローラの destroy メソッドによって行われていると思いますが、その方法はわかりません。ホームページのステータス フィードを見ると、link_to の削除ボタンには削除メソッドがありますが、feed_item の URL に移動します。この feed_item url はどこから来たのですか? フィードの元のソースは User モデルのマイクロポストの配列からのものだったので、link_to はマイクロポストを削除する方法を知っていると思いますが、feed_item url を押すことによってマイクロポストのコントローラの destroy メソッドに行くことをどのように知っていますか? link_to "title: feed_item.content" は、feed_item がどのマイクロポストを削除するかを知っていることと関係がありますか? マイクロポスト、feed_item、および destroy メソッドの関係を理解するのを手伝ってくれる人がいれば、非常に感謝しています。

4

1 に答える 1

0

私はDELETEメソッドを手伝うことができます.実際には非常に簡単です.ほとんどのブラウザはメソッドPATCH、PUT、DELETEをサポートしていないため、Railsはパラメータ「_method」を通過させて内部的に変換することで不正を行います. これが、Rails の内部に到達するまでは GET と見なされる理由です。

ここで詳細を読むことができます: http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch-put-or-delete-methods-work-questionmark

HTH

于 2013-07-09T07:56:35.393 に答える