概念的なレールの質問があります。私は現在、有名な 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 メソッドの関係を理解するのを手伝ってくれる人がいれば、非常に感謝しています。