加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 这是如何阻止质量分配的?

发布时间:2020-12-16 21:31:39 所属栏目:百科 来源:网络整理
导读:我想开始在我的模型中使用attr_accessible来解决质量分配问题.我理解它是如何工作的,并尽可能多地进行研究. 我不明白的是使用update_attributes(params [:my_form])或create(params [:my_form])和逐个设置字段之间的区别?这两个都不是那么脆弱吗? 没有at
我想开始在我的模型中使用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!

这些创建记录的方法都不是那么脆弱吗?黑客/黑客可以发送这两种方法的网址,两者都会做同样的,对吧?

或者使用attr_accessible并逐个更新字段做不同的事情或以某种方式变得更安全?

我发现使用attr_accessible的所有这些方法对我来说没有任何意义.它似乎以两种不同的方式做同样的事情.我错过了什么?

谢谢.

解决方法

在你这样做的方式,它不会阻止“质量分配”.

“质量分配”是Rails处理为模型中的属性赋值的过程中使用的术语.这通常在控制器中完成,使用参数中的名称和值.

当你自己进行分配时,它在某种程度上也是“大规模分配”;但在这种情况下,你可以很好地控制要分配的内容和不分配的内容.因此,为了节省编写样板分配代码,Rails提供了attr_accesible – 相同的控制,更少的代码.

要了解它的使用方法:

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

现在,user_ip_address是模型中的一个属性,可以通过质量赋值或“自动滚动质量分配”来分配.

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

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

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并将其从列表中排除.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读