你实际上有第四个模型——用户。我假设你无论如何都会这样做。
User has_many :lightboxes
Lightbox has_many :lightbox_items
Image has_many :lightbox_items
LightboxItem belongs_to :lightbox
LightboxItem belongs_to :image
Lightbox has_many :images, :through => :lightbox_item
Image has_many :lightboxes, :through => :lightbox_item
LightboxItem 是您可能想要存储附加数据的位置,例如该特定 Lightbox 中图像的位置。
关键是每个灯箱都属于一个用户。有了这个,您就可以将控制器中的所有 AR 调用限定为当前用户——从而防止他们修改其他灯箱。
因此,用户 carlos 的灯箱 ID 为 1。用户 phallstrom 的灯箱 ID 为 2。
在您的控制器中,您以某种方式current_user
在前置过滤器中设置为当前用户。然后,例如在获取指定灯箱的操作中,您将执行以下操作:
@lightbox = current_user.lightboxes.find_by_id(params[:id].to_i)
如果 current_user 是 carlos,并且 params[:id] 是 2,那么这样做不会返回任何内容。
同样,对于所有其他 CRUD 操作,您也可以将其范围限定为 current_user。