繁体   English   中英

attr_accessible在Rails中如何工作?

[英]How does attr_accessible work in Rails?

我只是对Ruby on Rails和模型中的attr_accessible属性有一个一般性的问题(Rails 3)。 有人可以解释应该在此处定义哪些模型属性吗? 我记得一些有关大规模分配风险的信息,尽管我在这方面不太了解...谢谢:)

想象一下一个包含一些字段的订单类:

Order.new({ :type => 'Corn', :quantity => 6 })

现在,假设该订单还具有折扣代码,例如:price_off。 您不想将:price_off标记为attr_accessible。 这可以阻止恶意代码编写帖子,最终导致这样做:

Order.new({ :type => 'Corn', :quantity => 6, :price_off => 30 })

即使您的表单没有用于:price_off的字段,默认情况下它也仅在您的模型中可用。 精心制作的POST仍可以设置它。

使用attr_accessible白名单可以对这些内容进行批量分配,并保护您希望在代码中进行显式控制的字段。

attr_accessor和attr_accessible之间的区别还有一些其他链接。

attr_accessible允许您在模型上定义可以批量分配的属性白名单。 因此,如果您有10个attrs,但仅将其中的3个列入白名单,则只能批量分配这三个。

class Foo < ActiveRecord:Base
  #lets say you have attrs one, two, three
  attr_accessible :one, :two
end

#You can do this:
Foo.new({:one => 1, :two => 2})

#if you were to do this:
Foo.new({:one => 1, :two => 2, :three => 3})
#Foo's three attr would not be set

Rails ActiveRecord文档中有关于该主题的一些详细信息。

基本上是attr_accessible:

指定可以通过质量分配设置的模型属性的白名单。

和attr_protected:

批量分配这些属性将被忽略,要分配给它们,您可以使用直接编写器方法。 这是为了防止敏感用户篡改URL或表单而覆盖敏感属性。

将attr_accessible视为您希望用户可以通过表单设置的属性列表,该列表中未包含的任何内容都将无法通过批量分配进行设置,这确保了您保护数据库中的敏感值免受恶意用户。 这是确保应用程序安全的一小步,如果您想遵循Rails最佳实践,则应该阅读《 Rails安全指南》

attr_accessible是rails功能,借助它我们可以允许对模型属性进行批量分配。 它与attr_protected功能相反。

为了使特定属性可用于批量分配,我们使用attr_accessible ,如下所示:

class Person < ActiveRecord::Base
attr_accessible : name
end



有关attr_accessibleStrong parameters更详细说明,您可以访问下面给出的链接:

[ http://findnerd.com/list/view/attr-accessible-in-Rails-4/3654/][1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM