এই থ্রেড এবং গুগলে থাকা অনেক লোক খুব ভালভাবে ব্যাখ্যা করেছেন যা attr_accessible
একটি অতিরিক্ত সময়ে হালনাগাদ করার অনুমতিপ্রাপ্ত বৈশিষ্ট্যের একটি শ্বেত তালিকাটি নির্দিষ্ট করে ( একই সাথে একই সাথে একটি বস্তুর মডেলের সমস্ত বৈশিষ্ট্য এক সাথে করা যায়) ) এটি আপনার অ্যাপ্লিকেশনটি সুরক্ষিত করার জন্য মূলত (এবং কেবল) "গণ নিয়োগ" থেকে জলদস্যু শোষণ করুন।
এটি এখানে অফিসিয়াল রেল ডক: ম্যাস অ্যাসাইনমেন্টে ব্যাখ্যা করা হয়েছে
attr_accessor
একটি ক্লাসে সেটার এবং গেটর পদ্ধতি তৈরি করার জন্য (দ্রুত) একটি রুবি কোড। এখানেই শেষ.
এখন, ব্যাখ্যা হিসাবে যা অনুপস্থিত তা হ'ল আপনি যখন কোনওভাবে কোনও ডাটাবেস টেবিলের সাথে একটি (রেল) মডেলটির মধ্যে একটি লিঙ্ক তৈরি করবেন তখন attr_accessor
আপনার মডেলটিতে সেটার এবং গিটারগুলি কখনও তৈরি করতে হবে না যাতে আপনার সংশোধন করতে সক্ষম হন টেবিলের রেকর্ডস
এর কারণ আপনার মডেল ActiveRecord::Base
ক্লাস থেকে সমস্ত পদ্ধতি উত্তরাধিকার সূত্রে প্রাপ্ত , যা ইতিমধ্যে আপনার জন্য প্রাথমিক CRUD অ্যাক্সেসরগুলি (তৈরি করুন, পড়ুন, আপডেট করুন, মুছুন) সংজ্ঞায়িত করে। এটি অফিল ডকটিতে এখানে রেলস মডেল এবং এখানে ওভাররাইটিং ডিফল্ট অ্যাক্সেসরের উপর ব্যাখ্যা করা হয়েছে ("ডিফল্ট অ্যাক্সেসর ওভাররাইট অধ্যায়" এ স্ক্রোল করুন)
উদাহরণস্বরূপ বলুন: আমাদের কাছে "ব্যবহারকারী" নামে একটি ডাটাবেস টেবিল রয়েছে যার মধ্যে তিনটি কলাম "প্রথম নাম", "শেষ নাম" এবং "ভূমিকা" রয়েছে:
এসকিউএল নির্দেশাবলী:
CREATE TABLE users (
firstname string,
lastname string
role string
);
আমি ধরে নিয়েছি যে আপনি config.active_record.whitelist_attributes = true
আপনার অ্যাপ্লিকেশনটিকে গণ-কার্যবিবরণী শোষণ থেকে রক্ষা করতে আপনার কনফিগারেশন / পরিবেশ / উত্পাদনের জন্য বিকল্পটি সেট করেছেন । এটি এখানে ব্যাখ্যা করা হয়েছে: গণ নিয়োগ
আপনার রেলস মডেল নীচের মডেলটির সাথে নিখুঁতভাবে কাজ করবে:
class User < ActiveRecord::Base
end
তবে আপনার ফর্মের দৃশ্যের কাজের জন্য আপনার নিয়ন্ত্রণকারীর মধ্যে আলাদা আলাদা ব্যবহারকারীর প্রতিটি বৈশিষ্ট্য আপডেট করতে হবে:
def update
@user = User.find_by_id(params[:id])
@user.firstname = params[:user][:firstname]
@user.lastname = params[:user][:lastname]
if @user.save
# Use of I18 internationalization t method for the flash message
flash[:success] = t('activerecord.successful.messages.updated', :model => User.model_name.human)
end
respond_with(@user)
end
এখন আপনার জীবনকে স্বাচ্ছন্দ্য করতে আপনি আপনার ব্যবহারকারীর মডেলটির জন্য কোনও জটিল নিয়ামক তৈরি করতে চান না। সুতরাং আপনি attr_accessible
আপনার ক্লাস মডেলটিতে বিশেষ পদ্ধতিটি ব্যবহার করবেন :
class User < ActiveRecord::Base
attr_accessible :firstname, :lastname
end
সুতরাং আপনি আপডেট করার জন্য "হাইওয়ে" (ভর অ্যাসাইনমেন্ট) ব্যবহার করতে পারেন:
def update
@user = User.find_by_id(params[:id])
if @user.update_attributes(params[:user])
# Use of I18 internationlization t method for the flash message
flash[:success] = t('activerecord.successful.messages.updated', :model => User.model_name.human)
end
respond_with(@user)
end
আপনি attr_accessible
তালিকায় "ভূমিকা" বৈশিষ্ট্যগুলি যুক্ত করেন নি কারণ আপনি নিজের ব্যবহারকারীদের নিজেরাই তাদের ভূমিকা সেট করতে দিচ্ছেন না (অ্যাডমিনের মতো)। আপনি নিজেই এটি অন্য একটি বিশেষ অ্যাডমিন ভিউতে করেন।
যদিও আপনার ব্যবহারকারীর দৃষ্টিভঙ্গি "ভূমিকা" ক্ষেত্রটি প্রদর্শন করে না, একটি জলদস্যু সহজেই একটি HTTP পোষ্ট অনুরোধ প্রেরণ করতে পারে যার মধ্যে প্যারামের হ্যাশটিতে "ভূমিকা" অন্তর্ভুক্ত থাকে। এর অনুপস্থিত "ভূমিকা" বৈশিষ্ট্যটি attr_accessible
হ'ল আপনার অ্যাপ্লিকেশনটিকে সে থেকে রক্ষা করা।
আপনি এখনও নীচের মতো নিজের ইউজারআরোল অ্যাট্রিবিউট সংশোধন করতে পারেন তবে সমস্ত বৈশিষ্ট্য একসাথে নয়।
@user.role = DEFAULT_ROLE
তুমি কেন ব্যবহার করবে attr_accessor
?
ঠিক আছে, এটির ক্ষেত্রে আপনার ব্যবহারকারী-ফর্মটি এমন একটি ক্ষেত্র দেখায় যা কলাম হিসাবে আপনার ব্যবহারকারীদের টেবিলে নেই।
উদাহরণস্বরূপ, বলুন যে আপনার ব্যবহারকারীর ভিউতে "আমি এখানে আছি-এ-অ্যাডমিন-দয়া করে বলুন" ফিল্ডটি দেখায়। আপনি এই তথ্যটি আপনার টেবিলে সংরক্ষণ করতে চান না। আপনি কেবল চান যে রেলস আপনাকে একটি ইমেল পাঠিয়ে সতর্ক করে দেয় যে একজন "পাগল" ;-) ব্যবহারকারী সাবস্ক্রাইব করেছেন।
এই তথ্যের ব্যবহার করতে সক্ষম হতে আপনাকে এটি অস্থায়ীভাবে অন্য কোথাও সংরক্ষণ করতে হবে। user.peekaboo
এট্রিবিউট এটিকে পুনরুদ্ধার করা এর চেয়ে সহজ আর কী ?
সুতরাং আপনি এই মডেলটি আপনার মডেলটিতে যুক্ত করুন:
class User < ActiveRecord::Base
attr_accessible :firstname, :lastname
attr_accessor :peekaboo
end
সুতরাং আপনি এটির একটি শিক্ষিত ব্যবহার করতে সক্ষম হবেন user.peekaboo
আপনার নিয়ামকের যে কোনও জায়গায় কোনও ইমেল প্রেরণ করতে বা যা যা চান তা করতে ।
অ্যাক্টিভেকর্ড আপনার টেবিলের "পিকাবু" বৈশিষ্ট্যটি সংরক্ষণ করবে না যখন আপনি এটি করেন user.save
কারণ তিনি তার মডেলটিতে এই নামের সাথে কোনও কলামের সাথে মেলে না see
attr_accessor
যা গেটর এবং সেটার পদ্ধতি উত্পন্ন করতে ব্যবহৃত হয়। এর একটি বিস্তৃত বিস্তৃত ব্যাখ্যার জন্য দয়া করে পূর্ববর্তী প্রশ্নের আমার উত্তরটি দেখুনattr_accessible
: stackoverflow.com/questions/2652907/… তারপরে আপনার যদি অন্য কোনও নির্দিষ্ট বিবরণ প্রয়োজন হয় তবে আপনার প্রশ্নটি আপডেট করুন।