आपको ऐसा करने के लिए कुछ रेल बंदर-पैचिंग करना होगा। इस कोड को केवल विकास और/या परीक्षण में उपयोग करना सुनिश्चित करें, हालांकि आप नहीं चाहते हैं कि कोई उपयोगकर्ता आपके एप को बड़े पैमाने पर असाइन करने का प्रयास करता है।
module ActiveModel
module MassAssignmentSecurity
module Sanitizer
protected
def warn!(attrs)
self.logger.debug "WARNING: Can't mass-assign protected attributes: #{attrs.join(', ')}" if self.logger
raise(RuntimeError, "Mass assignment error") if ['test', 'development'].include?(Rails.env)
end
end
end
end
यह नियमित चेतावनी बढ़ा देंगे, लेकिन यह भी संदेश "मास काम त्रुटि" जब परीक्षण और विकास के वातावरण में किसी भी समय की रक्षा की विशेषताओं बड़े पैमाने पर सौंपा हैं के साथ एक RuntimeError बढ़ा देंगे: मैं config/initializers/error_mass_assign.rb
के लिए निम्न जोड़ना होगा । यदि आप एक और अपवाद पसंद करते हैं तो आप ऊपर दिए गए कोड में त्रुटि संदेश या त्रुटि को भी संशोधित कर सकते हैं।
इसके लिए प्रभावी होने के लिए अपने कंसोल या सर्वर को पुनरारंभ करना सुनिश्चित करें।
पी.एस:
module ActiveRecord
class Base
def log_protected_attribute_removal(*attributes)
logger.debug "WARNING: Can't mass-assign these protected attributes: #{attributes.join(', ')}"
raise(RuntimeError, "Mass assignment error")
end
end
end
स्रोत
2011-04-05 21:23:39
क्यों नहीं है मैं उत्पादन में ऐसा करना चाहते हैं: रेल 2 में आप निम्न कार्य करना चाहते हैं? हां, यदि कोई उपयोगकर्ता बड़े पैमाने पर असाइन करने का प्रयास करता है, तो वह या तो नियमों के खिलाफ कुछ करने की कोशिश कर रहा है (जिस स्थिति में उसका अनुरोध उड़ाया जाता है) या मैं एक विशेषता सुलभ बनाने के लिए भूल गया हूं (जिस स्थिति में मैं जानना चाहता हूं इसके बारे में)। –
इसके अलावा, और प्रश्न में उल्लेख करने के लिए खेद है, लेकिन मैं रेल 2.3.4 का उपयोग कर रहा हूं। रेल के मेरे संस्करण में काम करने के लिए आपके जवाब में मुझे क्या परिवर्तन करना चाहिए? –
यदि आप ऐसा करते हैं तो यह ठीक है, आप केवल त्रुटि को पकड़ना और उचित तरीके से इसे संभालना चाहते हैं, आप अपने उपयोगकर्ता को 500 त्रुटि पृष्ठों और कोई स्पष्टीकरण नहीं छोड़ना चाहते हैं। उदाहरण के लिए, यदि उपयोगकर्ता आपकी साइट को हैक करने का प्रयास कर रहा है तो आपको ऐसा होने पर शायद अधिसूचित किया जाना चाहिए, और यदि आप एक विशेषता को सुलभ के रूप में सेट करना भूल गए हैं, तो आपको कुछ ठीक करने की आवश्यकता है। –