ruby-on-rails – 这是如何阻止质量分配的?
我想开始在我的模型中使用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 :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并将其从列表中排除. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |