2012-05-02 14 views
5

लिए अतिरिक्त पैरामीटर पारित मैं एक कार्रवाई बनानेरेल एक नियंत्रक में एक मॉडल

def create 

    params[:note] 
    @note = current_user.notes.new(params[:note]) 

     if @note.save 
     respond_with @note, status: :created 
     else 
     respond_with @note.errors, status: :unprocessable_entity 
     end 
    end 

मैं मॉडल, कैसे है कि क्या करना है और कैसे एक में पारित परम पुनर्प्राप्त करने के लिए एक और परम current_user कहा जाता है को पास करना चाहते है मॉडल विधि?

+0

जो मॉडल y ऐसा करने के लिए कहां उस परम पास करना चाहते हैं? – MrDanA

उत्तर

3
@note = Note.new(params[:note].merge(:user_id => current_user.id)) 

लेकिन शायद कहा जाता है इस का सबसे अच्छा तरीका आप इसे कैसे करते हैं, इसे देखो नहीं है: Adding variable to params in rails

आप मॉडल में current_user के लिए उपयोग करना चाहते हैं, देखें: Rails 3 devise, current_user is not accessible in a Model ?

+1

जब आप सीधे सीधे असाइन कर सकते हैं तो आपको 'विलय' करने की आवश्यकता नहीं है: 'पैराम्स [: नोट] [: user_id] = current_user.id' याद रखें कि' विलय 'एक प्रतिलिपि देता है, इसलिए यह पैरामीटर को परिवर्तित नहीं करता है लेकिन इसके बजाय अतिरिक्त प्रविष्टियों के साथ एक संस्करण देता है। स्पष्टीकरण के लिए – tadman

+0

धन्यवाद। जब मैंने जवाब लिखा, तो मुझे 'नया' कॉल करते समय 'मर्ज' का उपयोग करना था। यानी: 'नोट.न्यू (पैराम्स [: नोट] .merge (: user_id => current_user.id))' क्या यह सही होगा? –

+0

यह समझ में आता है क्योंकि आप परिणाम का उपयोग करते हैं। एक शून्य संदर्भ में 'विलय' लगभग हमेशा व्यर्थ है। – tadman

1

आमतौर पर आप इसे एक hide_field के साथ करते हैं।

तो अपने निर्माण दृश्य में, आप current_user को एक छिपे हुए फ़ील्ड के रूप में जोड़ देंगे।

<%= form_for @note do |f| %> 
    # all your real fields 
    <%= f.hidden_field :current_user current_user %> 
<% end %> 

तब में नियंत्रक पैरामीटर बनाने [: टिप्पणी] [: current_user] परिभाषित किया जाएगा, और अपने मॉडल को जोड़ा गया, अपने मॉडल मानते हुए एक विशेषता 'current_user'

+5

कस्टम छुपा फ़ील्ड जोड़ने के दौरान सहायक हो सकता है, मैं current_user के लिए नहीं होगा। सबमिट करने से पहले किसी दुर्भावनापूर्ण उपयोगकर्ता को फ़ॉर्म की सामग्री को बदलना बहुत आसान है। अब आपके टेबल में एक रिकॉर्ड है जो कहता है कि बॉब ने कुछ किया, जब वास्तव में यह ऐलिस था ... इसे मिखाइल द्वारा सुझाए गए नियंत्रक के पास ले जाएं। – Unixmonkey

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