attr_accessible
लगता है अब मेरे मॉडल के भीतर काम नहीं करेगा।
रेल 4 में बड़े पैमाने पर असाइनमेंट की अनुमति देने का तरीका क्या है?
attr_accessible
लगता है अब मेरे मॉडल के भीतर काम नहीं करेगा।
रेल 4 में बड़े पैमाने पर असाइनमेंट की अनुमति देने का तरीका क्या है?
जवाबों:
रेल 4 अब मजबूत मापदंडों का उपयोग करता है ।
नियंत्रक में अब प्रोटेक्टिंग विशेषताएँ की जाती हैं। यह एक उदाहरण है:
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
attr_accessible
अब मॉडल में सेट करने की आवश्यकता नहीं है।
accepts_nested_attributes_for
accepts_nested_attribute_for
मजबूत मापदंडों के साथ उपयोग करने के लिए , आपको यह निर्दिष्ट करने की आवश्यकता होगी कि कौन से नेस्टेड विशेषताओं को श्वेत सूची में होना चाहिए।
class Person
has_many :pets
accepts_nested_attributes_for :pets
end
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
# ...
private
def person_params
params.require(:person).permit(:name, :age, pets_attributes: [:name, :category])
end
end
कीवर्ड आत्म-व्याख्यात्मक हैं, लेकिन बस मामले में, आप रेल एक्शन कंट्रोलर गाइड में मजबूत मापदंडों के बारे में अधिक जानकारी पा सकते हैं ।
नोट : यदि आप अभी भी उपयोग करना चाहते हैं attr_accessible
, तो आपको protected_attributes
अपने साथ जोड़ना होगा Gemfile
। अन्यथा, आप एक के साथ सामना किया जाएगा RuntimeError
।
RuntimeError in MicropostsController#index 'attr_accessible' is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add 'protected_attributes' to your Gemfile to use old one.
यदि आप attr_accessible पसंद करते हैं, तो आप इसका उपयोग रेल 4 में भी कर सकते हैं। आपको इसे मणि की तरह स्थापित करना चाहिए:
gem 'protected_attributes'
उसके बाद आप Rr 3 में अपने जैसे मॉडलों में attr_accessible का उपयोग कर सकते हैं
इसके अलावा, और मुझे लगता है कि यह सबसे अच्छा तरीका है- बड़े पैमाने पर असाइनमेंट से निपटने के लिए फॉर्म ऑब्जेक्ट्स का उपयोग करना, और नेस्टेड ऑब्जेक्ट्स को सहेजना, और आप उस तरह से संरक्षित_एट्रेक्ट रत्न का उपयोग भी कर सकते हैं।
class NestedForm
include ActiveModel::MassAssignmentSecurity
attr_accessible :name,
:telephone, as: :create_params
def create_objects(params)
SomeModel.new(sanitized_params(params, :create_params))
end
end
हम प्रयोग कर सकते हैं
params.require(:person).permit(:name, :age)
जहां व्यक्ति मॉडल है, आप इस कोड को एक विधि person_params पर पारित कर सकते हैं और params के स्थान पर उपयोग कर सकते हैं: [व्यक्ति] बनाने की विधि या किसी अन्य विधि में
रेल 5 के लिए एक अपडेट:
gem 'protected_attributes'
अब काम नहीं लगता। लेकिन दे:
मणि 'protect_attributes_continued'
एक कोशिश।
1) अपडेट अपडेट करें ताकि यह आपके एप्लिकेशन के Gemfile में इस लाइन को जोड़कर रेल 4.0 को हैंडल कर सके:
gem 'devise', '3.0.0.rc'
फिर निष्पादित करें:
$ bundle
2) attr_accessible
रेल की फिर से पुरानी कार्यक्षमता जोड़ें 4.0
उपयोग करने की कोशिश करें attr_accessible
और इस पर टिप्पणी न करें।
इस लाइन को अपने एप्लिकेशन के जेमफाइल में जोड़ें:
gem 'protected_attributes'
फिर निष्पादित करें:
$ bundle
attr_accessible
हटाने की आवश्यकता है। अगर हम इसे रखेंगे तो क्या होगा?