0

我们假设已设置身份验证系统并且我们可以访问变量current_user,例如:使用 Devise gem。

我们有两个模型,UserThingUser has one Thing。在控制器中,如果我们假设 aUser只能创建/删除他自己的Thing.

例如创建动作。

选项 1(标准):

@thing = Thing.new(params[:thing])
@thing.save

我们在视图中设置了 user_id。

选项 2:

@thing = current_user.create_thing

而且我们不用费心在视图中设置 user_id。

两者都有效,但我想知道是否必须避免或更好以及为什么。谢谢!

4

3 回答 3

2

我个人认为第二个选项更好,因为(正如您所说)您不必弄乱 user_id (既不在视图中也不特别在控制器内)。

于 2013-05-23T09:51:53.567 回答
2

第一个选项仅在您希望允许用户为自己以外的其他用户设置内容时有用。如果您不想允许这样做,第一个选项甚至会引入一个可能的漏洞。恶意用户可以尝试利用user_id视图中的字段。因此,假设用户只能设置自己的东西:绝对是选项 2。

于 2013-05-23T09:55:38.933 回答
0

如果您使用的是 devise gem,最好使用 current_user。这将比传递用户 ID 更安全。

于 2013-05-23T10:12:07.390 回答