dsm*_*rey 6 ruby-on-rails mass-assignment
我想开始在模型中使用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处理为模型中的属性赋值的过程中使用的术语.这通常在控制器中完成,使用名称和值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在列表中使用和排除.
| 归档时间: | 
 | 
| 查看次数: | 928 次 | 
| 最近记录: |