在此先感谢您的帮助!我有一个用 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 中,我要确保当前用户只能删除与其帐户关联的活动。
目前,这是我的四个模型(去掉了不必要的东西):
用户.rb
class User < ActiveRecord::Base
has_many :itineraries
end
行程.rb
class Itinerary < ActiveRecord::Base
has_many :locations
belongs_to :user
end
位置.rb
class Location < ActiveRecord::Base
belongs_to :itinerary
has_many :activities
end
活动.rb
class Activity < ActiveRecord::Base
belongs_to :location
end
这是我从activity_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 方法连接模型,但我不知道如何为超过三个模型执行此操作,而且我不确定这是正确的方法。再次感谢您提供的任何帮助!