よろしくお願いします!Ruby on Rails(2.3.15、1.8.7)で構築されたサイトがあり、さまざまな場所への旅程を作成し、場所ごとにさまざまなアクティビティを実行できます。このサイトには、現在のユーザーが自分のアカウントに関連付けられている旅程のみを削除できるようにする方法があります。これを行うitineraries_controller.rbのコードは、次のようになります。
def destroy
@itinerary = Itinerary.find(params[:id])
if @itinerary.user_id == current_user.id
@itinerary.destroy
respond_to do |format|
format.html { redirect_to('/home') }
format.xml { head :ok }
end
else
redirect_to '/'
end
end
このシステムはうまく機能します。でも、同じことをしたいです。activity_controllerで、現在のユーザーが自分のアカウントに関連付けられているアクティビティのみを削除できるようにします。
現在、これが私の4つのモデルです(不要なものは削除されています):
User.rb
class User < ActiveRecord::Base
has_many :itineraries
end
Itinerary.rb
class Itinerary < ActiveRecord::Base
has_many :locations
belongs_to :user
end
Location.rb
class Location < ActiveRecord::Base
belongs_to :itinerary
has_many :activities
end
Activity.rb
class Activity < ActiveRecord::Base
belongs_to :location
end
これが、activities_controller.rbから始めているところです。参考までに、私のcurrent_user.idはauthenticated_system.rbによって作成されているので、その部分について心配する必要はありません。
def destroy
@activity = Activity.find(params[:id])
if @itinerary.user_id == current_user.id
@activity.destroy
respond_to do |format|
format.html { redirect_to("/") }
format.xml { head :ok }
end
else
redirect_to '/'
end
end
has_many:throughアプローチを使用してモデルを接続しようとしましたが、3つ以上のモデルで接続する方法がわからず、とにかくそれが正しいアプローチであるかどうかはわかりませんでした。あなたが提供できるどんな助けにももう一度感謝します!