gpt4 book ai didi

ruby-on-rails - 如何停止批量分配?

转载 作者:行者123 更新时间:2023-12-04 13:29:01 24 4
gpt4 key购买 nike

我想开始在模型中使用attr_accessible来停止大规模分配问题。我了解它是如何工作的,并已尽我所能进行研究。

我不明白的是,使用update_attributes(params [:my_form])或create(params [:my_form])并逐个设置字段之间的区别是什么?难道不是两个人都一样脆弱吗?

没有attr_accessible和这样做之间有什么区别...

@model_object = ModelObject.new
@model_object.create(params[:model_object_params])

并具有attr_accessible并执行此操作...
@model_object = ModelObject.new
@model_object.field1 = params[:model_object_params][:field1]
@model_object.field2 = params[:model_object_params][:field2]
@model_object.field3 = params[:model_object_params][:field3]
@model_object.save!

这两种创建记录的方法不是同样容易受到攻击吗?黑客/黑客可以向这两种方法发送url,并且两者的作用相同,对吗?

还是使用attr_accessible并逐一更新字段会有所不同或以某种方式变得更安全?

我发现使用attr_accessible的所有这些方法对我来说毫无意义。似乎是通过两种不同的方式来做同一件事。我想念什么?

谢谢。

最佳答案

用这种方式,它不会阻止“质量分配”。

“质量分配”是Rails处理模型中属性的值分配时使用的术语。通常,这是在 Controller 中使用params中的名称和值完成的。

在进行自己的分配时,从某种意义上说,它也是“大量分配”。但是在这种情况下,您可以很好地控制分配的内容和不分配的内容。因此,为了节省编写样板分配代码的麻烦,Rails提供了attr_accesible-相同的控件,更少的代码。

要查看其用法:

假设ActivityLog模型具有名为user_ip_address的属性。

现在,user_ip_address是模型中的一个属性,可以通过质量分配或“自卷质量分配”进行分配。

但是在两种情况下都是错误的-您不希望用户提供的输入为该属性设置值。

相反,您希望始终找出用户的实际IP地址并分配该值(忽略任何
params)。因此,您可以从user_ip_address中排除attr_accessible,而自己进行分配。

attr_accessible :all_attributes_except_user_ip_address

@al = ActivityLog.new(params[:model_object_params])
@al.user_ip_address = get_origin_user_ip_address
@al.save

对于用户不应更改的任何信息,请使用 attr_accessible并将其从列表中排除。

关于ruby-on-rails - 如何停止批量分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com