2012-03-15 13 views
8

मेरे पास एक उपयोगकर्ता मॉडल के साथ एक रेल ऐप है जिसमें 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

+2

यदि मैं आपको सही तरीके से समझ रहा हूं, तो आपने अपने प्रश्न का उत्तर दिया। यदि ऐसा है, तो आपको अपना उत्तर एक उत्तर के रूप में पोस्ट करना चाहिए (आपके प्रश्न में कोई संपादन नहीं) और इसे स्वीकार करें। –

उत्तर

3

एक गुमराह attr_accessor था हो सकता है: अपने मॉडल में व्यवस्थापक है कि इस काम के लिए हो रही पर एक पूर्व प्रयास से में छोड़ दिया गया था। मैंने इसे अनदेखा किया। इसे हटाने से इसे ठीक किया गया।

तो, ऊपर की ओर यह है कि रेल 3.2 में काम करने वाली गतिशील भूमिकाएं प्राप्त करने का यह एक आसान तरीका है।

संबंधित मुद्दे