trf*_*ach 5 ruby ruby-on-rails ruby-on-rails-3
我刚才有一个关于Ruby on Rails和模型中的attr_accessible属性的一般性问题(Rails 3).有人可以解释那里应该定义哪些模型属性?我记得关于大规模任务的风险,虽然我在这方面不太了解...谢谢:)
想象一下带有一些字段的订单类:
Order.new({ :type => 'Corn', :quantity => 6 })
Run Code Online (Sandbox Code Playgroud)
现在假设订单也有折扣代码,比如:price_off.您不希望将price_off标记为attr_accessible.这可以阻止恶意代码制作一个帖子,最终做到这样的事情:
Order.new({ :type => 'Corn', :quantity => 6, :price_off => 30 })
Run Code Online (Sandbox Code Playgroud)
即使您的表单没有以下字段:price_off,如果它只是在您的模型中,默认情况下它也可用.精心设计的POST仍然可以设置它.
使用attr_accessible白名单可以批量分配这些内容,并保护您希望在代码中明确控制的字段.
attr_accessor和attr_accessible之间的区别有一些额外的链接.
attr_accessible 允许您在模型上定义可批量分配的属性白名单。因此,如果您有 10 个属性,但只将其中 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5440 次 |
| 最近记录: |