2010-02-09 17 views
6

मेरे आवेदन में, केवल व्यवस्थापक भूमिका वाले उपयोगकर्ता नए उपयोगकर्ता बना सकते हैं। नए उपयोगकर्ता प्रपत्र में, मेरे पास प्रत्येक उपलब्ध भूमिकाओं के लिए एक चयन बॉक्स है जिसे नए उपयोगकर्ताओं को असाइन किया जा सकता है।रेल: क्या आप बाद की विधि के लिए तर्क पारित कर सकते हैं?

मैं उपयोगकर्ता को भूमिका निभाने के लिए बाद की कॉलबैक विधि का उपयोग करने की उम्मीद कर रहा हूं। मैं after_create विधि में चयन बॉक्स के चयनित मान को कैसे एक्सेस कर सकता हूं?

def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
     if @user.save 
     flash[:notice] = 'User creation successful.' 
     format.html { redirect_to @user } 
     else 
     format.html { render :action => 'new' } 
     end 
    end 
    end 

उपयोगकर्ता मॉडल में मेरे पास है:

after_create :assign_roles 

    def assign_roles 
    self.has_role! 'owner', self 
    # self.has_role! params[:role] 
    end 

मैं एक त्रुटि प्राप्त क्योंकि मॉडल पता नहीं है क्या भूमिका है।

उत्तर

13
तरह लग रहा है अगर वहाँ है

वर्चुअल विशेषता बनाने के लिए आप attr_accessor का उपयोग कर सकते हैं और उस विशेषता को अपनी निर्माण क्रिया के हिस्से के रूप में सेट कर सकते हैं।

+1

हां, आप जो चाहते हैं वह "वर्चुअल विशेषता" है जो चेकबॉक्स चयन को शामिल करता है। इस पर एक महान रेलस्कास्ट है: http://railscasts.com/episodes/167-more-on-virtual-attributes –

4

संक्षिप्त उत्तर है, नहीं। आप बाद में किसी भी तर्क को पास नहीं कर सकते हैं।

हालांकि जो भी करने की कोशिश कर रहा है वह एक बहुत आम है और इसके आसपास अन्य तरीके भी हैं।

उनमें से अधिकतर प्रश्न में वस्तु से पहले रिश्ते को आवंटित करने में शामिल हैं, और ActiveRecord सबकुछ का ख्याल रखने दें।

इसे पूरा करने का सबसे आसान तरीका भूमिकाओं और उपयोगकर्ताओं के बीच संबंधों पर निर्भर करता है। यदि कई लोगों में से एक है (प्रत्येक उपयोगकर्ता की एक भूमिका है) तो अपने उपयोगकर्ता एक भूमिका से संबंधित हैं और फ़ॉर्म के माध्यम से role_id भेजा है।

<%= f.collection_select :role_id, Role.all, :id, :name %> 

एक बहुत से उपयोगकर्ताओं और भूमिकाओं के बीच कई रिश्ते के लिए आप या तो मामले में नियंत्रक user.role_ids

<%= f.collection_select :role_ids, Role,all, :id, :name, {}, :multiple => :true %> 

@ करने के लिए बताए द्वारा एक ही लक्ष्य को हासिल

def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
    if @user.save 
     flash[:notice] = 'User creation successful.' 
     format.html { redirect_to @user } 
    else 
     format.html { render :action => 'new' } 
    end 
    end 
end 
संबंधित मुद्दे