मेरे पास एक उपयोगकर्ता मॉडल के साथ एक रेल ऐप है जिसमें admin
विशेषता है। यह attr_accessible
का उपयोग कर बंद कर दिया गया है। मेरे मॉडल इस तरह दिखता है:रेल 3.2, मास असाइनमेंट, गतिशील भूमिकाएं?
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation, :admin, :as => :admin
और यहाँ की तरह मेरे उन नियंत्रक में मेरी अद्यतन विधि दिखता है:
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user], :as => current_user_role.to_sym)
flash[:notice] = "Profile updated"
redirect_to edit_user_url(@user)
else
render 'edit'
end
end
मुझे लगता है कि वापस एक स्ट्रिंग के रूप भूमिका गुजरता अपने आवेदन नियंत्रक में एक सहायक विधि है :
def current_user_role
@current_user_role ||= current_user.admin? ? "admin" : "default"
end
helper_method :current_user_role
मैं भी config/application.rb
में config.active_record.whitelist_attributes = true
निर्धारित किया है।
मैंने सत्यापित किया है कि current_user_role
विधि वर्तमान उपयोगकर्ता की व्यवस्थापक स्थिति के आधार पर उचित मूल्य लौटा रही है। रेल एक बड़े पैमाने पर असाइनमेंट त्रुटि फेंक नहीं रहा है। लेकिन जब मैं व्यवस्थापक के रूप में लॉग इन करते समय किसी उपयोगकर्ता की व्यवस्थापक स्थिति को अपडेट करने का प्रयास करता हूं, तो रेल अपडेट करता है और चुपचाप admin
विशेषता को अनदेखा करता है। रेल कंसोल में उपयोगकर्ता के रिकॉर्ड को खींचने से पता चलता है कि रिकॉर्ड संशोधित नहीं किया गया है।
मुझे लगता है कि एक रूबी- या रेल-विशिष्ट मुद्दा है जो मुझे पता नहीं है। मैं गतिशील भूमिका निभाने पर किसी भी जानकारी का पता नहीं लगा सकता। सबसे अच्छा मुझे मिल सकता था this।
यदि मैं आपको सही तरीके से समझ रहा हूं, तो आपने अपने प्रश्न का उत्तर दिया। यदि ऐसा है, तो आपको अपना उत्तर एक उत्तर के रूप में पोस्ट करना चाहिए (आपके प्रश्न में कोई संपादन नहीं) और इसे स्वीकार करें। –