4 রেলগুলিতে কীভাবে অ্যাট্রি_অ্যাক্সেসযোগ্য?


258

attr_accessible আমার মডেলের মধ্যে আর কাজ করবে না বলে মনে হচ্ছে।

4 রেলগুলিতে ভর অ্যাসাইনমেন্টের অনুমতি দেওয়ার উপায় কী?

উত্তর:


447

রেল 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


1
দস্তাবেজটি বলে নি যে attr_accessibleএটি অপসারণ করা দরকার। আমরা তা রাখলে কী হবে?
লুলালালা

12
আপনি যদি আপনার গেমফাইলে কিছু সামঞ্জস্য না করেন তবে আপনি একটি ত্রুটি পাবেন। 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.
ব্যবহারকারী

6
দুর্দান্ত ব্যাখ্যা। এটি অনুশীলনের মতো মনে হয়, যদিও এটি রেলগুলি ফ্যাট মডেল, পাতলা নিয়ামক ইত্যাদি থেকে দূরে সরু মডেলগুলি এবং সত্যিকার অর্থে ব্লাড কন্ট্রোলারের দিকে নিয়ে যায়। আপনাকে প্রতিটি দৃষ্টান্তের জন্য এই জিনিসটি লিখতে হবে, এটি দুর্দান্তভাবে পড়ে না এবং বাসা বাঁধাকে ব্যথা বলে মনে হয়। মডেল সিস্টেমে পুরানো অ্যাট্রি_অ্যাক্সেসেবল / অ্যাট্রি_অ্যাকসেসরটি ভাঙ্গা হয়নি, এবং এটি ঠিক করার দরকার নেই। এক ব্লগ পোস্ট এই ক্ষেত্রে খুব জনপ্রিয় হয়েছে।
আরসিডি

1
আপনার নিয়ামকগুলিতে আপনাকে অনুমোদিত প্যারামিটারগুলি পরিচালনা করতে হবে না। আসলে এটি একক দায়িত্বের নীতি লঙ্ঘন। নীচের ব্লগ পোস্টটি একবার
পিয়েরে-লুই গটফ্রয়েস

3
তাই জিমিকি এবং ঘন ঘন এপিস পরিবর্তন করা, নতুন প্যাডেন্টিকের সাথে একত্রে আরও অনেক বেদনাদায়ক রেলের আপগ্রেডে অনেক বিকাশকারী ঘন্টা নষ্ট করা হয় :-(
ব্রায়ান তাকিতা

22

আপনি যদি অ্যাট্রি_ অ্যাক্সেসেবল পছন্দ করেন তবে আপনি এটি 4 রেলগুলিতেও ব্যবহার করতে পারেন। আপনার এটি রত্নের মতো ইনস্টল করা উচিত:

gem 'protected_attributes'

এর পরে আপনি আপনার কাছে রেল 3 এর মতো মডেলগুলিতে অ্যাট্রি_অ্যাক্সেসযোগ্য ব্যবহার করতে পারেন

এছাড়াও, এবং আমি মনে করি যে এটি সবচেয়ে ভাল উপায় - ভর কার্যকারিতা নিয়ে কাজ করার জন্য ফর্ম অবজেক্টগুলি ব্যবহার করা এবং নেস্টেড অবজেক্টগুলি সংরক্ষণ করা এবং আপনি সেভাবে সুরক্ষিত_অযুক্তি রত্নও ব্যবহার করতে পারেন

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

1
আপনি যখন 'শক্তিশালী পরামিতি' ব্যবহার করেন আপনি নিয়ামক স্তরে পরামিতিগুলি ফিল্টার করেন এবং আমি মনে করি না যে এটি সমস্ত অ্যাপ্লিকেশনগুলির জন্য সেরা ধারণা। আমার জন্য পরামিতিগুলি ফিল্টার করার সর্বোত্তম উপায় হ'ল অতিরিক্ত স্তর ব্যবহার করা। এবং এই স্তরটি লেখার জন্য আমরা '
संरक्षित_অযুক্তি

4

আমরা ব্যবহার করতে পারি

params.require(:person).permit(:name, :age)

যেখানে ব্যক্তি মডেল, আপনি কোনও পদ্ধতিতে এই কোডটি পাস করতে পারেন person_params এবং প্যারামের জায়গায় ব্যবহার করতে পারেন [: ব্যক্তি] তৈরি পদ্ধতিতে বা অন্য পদ্ধতিতে


2

5 রেলগুলির জন্য একটি আপডেট:

gem 'protected_attributes' 

আর কাজ করবে বলে মনে হচ্ছে না। তবে দিন:

রত্ন

একটি চেষ্টা.


1

1) ডিভাইসটি আপডেট করুন যাতে এটি আপনার অ্যাপ্লিকেশনটির জেমফাইলে এই লাইনটি যুক্ত করে রেলস 4.0 পরিচালনা করতে পারে:

gem 'devise', '3.0.0.rc' 

তারপরে কার্যকর করুন:

$ bundle

2) attr_accessibleআবার রেলের পুরানো কার্যকারিতা যুক্ত করুন 4.0

ব্যবহার করার চেষ্টা করুন attr_accessibleএবং এ সম্পর্কে মন্তব্য করবেন না।

আপনার আবেদনের জেমফাইলে এই লাইনটি যুক্ত করুন:

gem 'protected_attributes'

তারপরে কার্যকর করুন:

$ bundle
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.