我聽說過幾個人抱怨並在Rails中發佈關於大規模任務的問題。我有幾次同樣的錯誤,我所做的只是attr_accessible
。但是什麼是大規模任務?有人可以用例子來解釋嗎?什麼是Rails中的大規模任務3
18
A
回答
34
Mass Assignment是Rails用參數散列構造對象的行爲。這是「質量分配」,因爲您正在通過一個賦值運算符爲屬性分配多個值。
下面的代碼片段進行name
和topic
屬性Post
模型的質量分配:
Post.new(:name => "John", :topic => "Something")
Post.create(:name => "John", :topic => "Something")
Post.update_attributes(:name => "John", :topic => "Something")
爲了這個工作,你的模型必須允許質量分配在你的哈希每個屬性有傳入
的兩種情況下,這將失敗:
- 您有
attr_accessible
聲明這確實不包括:name
- 你有一個
attr_protected
這確實包括:name
它最近成爲該屬性必須手動白名單通過attr_accessible
爲了質量分配默認成功。在此之前,默認是爲屬性的可分配除非他們明確地列入黑名單attr_protected
或attr_acessible.
重要的是要考慮哪些屬性可以大量分配,因爲這樣的代碼是很重要的任何其他屬性被白名單這是如此普遍:
@post = Post.new(params[:post])
典型地,當用戶提交由form_for @post
呈現的形式,這是使用。在理想的世界中,params[:post]
散列應該只包含我們在表單上顯示的字段。但是,用戶在他們的請求中傳遞額外的字段很容易,所以實際上您允許用戶在@post
上設置任意字段,而不僅僅是表單上顯示的字段。
未能安全地使用批量分配導致了一些很大的Rails應用程序中的幾個高配置錯誤,例如允許某人將inject their own public key放入Github存儲庫中的可信密鑰列表並將代碼直接推送到存儲庫中應該沒有訪問權限。
相關問題
- 1. Rails「大規模任務」 - 究竟構成了什麼?
- 2. Rails中規模重複任務
- 3. 爲什麼Pex不是大規模的
- 4. AppEngine「任務規模太大」例外
- 5. 什麼是Rails 3中的link_to t()?
- 6. 什麼是rails 3中的新功能?
- 7. in Rails 3什麼是「current_user」?
- 8. ASP.NET MVC中的大規模延遲3
- 9. 是什麼異步任務和任務
- 10. Rails 3 link_to rake任務
- 11. Rails 3任務範圍?
- 12. 的Rails 3:無法大規模分配嵌套屬性
- 13. 什麼是Rackamole的好選擇? - Rails 3
- 14. Rails模塊中的mattr_accessor是什麼?
- 15. Rake中的「環境」任務是什麼?
- 16. 什麼是Java中的任務?
- 17. 大規模閃存生產的最佳實踐是什麼?
- 18. Rails 3延遲工作 - 升級到Rails 3中斷delayed_job任務
- 19. 究竟是什麼任務
- 20. ValidateSilverlightFrameworkPaths任務?那是什麼?
- 21. 什麼是compileDebugJavaWithJavac任務?
- 22. Rails 3模塊大小寫
- 23. Rake與「rails」下的任務背後的邏輯是什麼
- 24. Lua的string.gsub模式規則是什麼?
- 25. 爲什麼BigDecimal的規模不是BigInteger?
- 26. 什麼是SharePoint任務列表中的「任務組」字段?
- 27. 有沒有辦法做到這一點在Rails沒有大規模任務?
- 28. 爲什麼是「異步任務」的方法不是任務
- 29. 爲什麼Rails 3不支持完整的html5表單規範?
- 30. 什麼是Rails 3替代ActiveRecord :: Errors?
看看這個:http://railscasts.com/episodes/26-hackers-love-mass-assignment。雖然它可能有點過時,但核心原則仍然是一樣的。 – 2012-08-03 18:26:13
注意:** Rails 4 **在控制器中使用[** strong parameters **](http://weblog.rubyonrails.org/2012/3/21/strong-parameters/)更好地處理質量分配,而不是保護在模型中。請參閱[**本文**](http://net.tutsplus.com/tutorials/ruby/mass-assignment-rails-and-you/),瞭解什麼是集體分配和Rails 3/4技術。 – Yarin 2013-09-11 17:31:20