簡體   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