0

我有两个模型:图像和灯箱。为了关联这两个模型(has_many),我有第三个模型 LightboxImages。

一个灯箱可以有多个图像,一个图像可以在多个灯箱中。

一个灯箱是动态创建的(使用远程 js),用户也可以动态地将图像添加到这个灯箱中。

我的第一个想法是简单地为 LightboxImages 控制器的 create 方法创建一个 URL,将 Lightbox Id 和 Image Id 作为参数传递。

然而,这种方法似乎脆弱且不安全,因为用户可以轻松地模拟这种行为。

这种情况的最佳设计是什么,动态创建关系记录?

4

1 回答 1

0

你实际上有第四个模型——用户。我假设你无论如何都会这样做。

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。

于 2013-04-03T03:40:59.843 回答