2012-10-06 4 views
9

मेरे पास सामग्री बनाने (शीर्षक, विवरण और सामग्री - सभी मूलभूत) बनाने के लिए एक फॉर्म है। फॉर्म इन विवरणों को ठीक से बचाता है लेकिन यह user_id को सहेजता नहीं है, जो current_user का user_id होना चाहिए। मैं यह कैसे करु? यह आसान होना चाहिए लेकिन अभी तक कुछ भी काम नहीं किया है।रेल_ में form_for करने के लिए user_id पर current_user को कैसे जोड़ें?

def create 
    @material = Material.new(params[:material]) 
    if @material.save 
    flash[:success] = "Content Successfully Created" 
    redirect_to @material 
    else 
    render 'new' 
    end 
end 

उत्तर

10
def create 
@material = Material.new(params[:material]) 
@material.user_id = current_user.id if current_user 
if @material.save 
    flash[:success] = "Content Successfully Created" 
    redirect_to @material 
else 
    render 'new' 
end 
end 
+0

धन्यवाद। एक दम बढ़िया। – Finnjon

2

मान लिया जाये कि आप current_user में लॉगिन उपयोगकर्ताओं के वस्तु बचत कर रहे हैं निम्नलिखित के लिए काम करेंगे आप

@material = Material.new(params[:material]) 
    @material.user_id = current_user.id 
    if @material.save 
3

वहाँ यह कैसे आप अपने आवेदन सेटअप के आधार पर करने के लिए कुछ अलग तरीके हैं। अगर कोई उपयोगकर्ता और सामग्री (उपयोगकर्ता कई सामग्री है), आप देखेंगे कि आपके नियंत्रक में इस्तेमाल कर सकते हैं के बीच एक रिश्ता है:

def create 
    @material = current_user.materials.new(params[:material]) 
    # ... 
end 

आपको लगता है कि संबंध नहीं है, तो मैं अभी भी नियंत्रक में यह स्थापित करने की सिफारिश करेंगे रूप में एक छिपे हुए क्षेत्र के विरोध में।

def create 
    @material = Material.new(params[:material].merge(user_id: current_user)) 
    # ... 
end 
+0

हाँ मैं संघों की स्थापना के बारे में सोच रहा है: यह अधिक सुरक्षित है, क्योंकि यह नहीं दूँगी किसी प्रयोक्ता आईडी मूल्य के साथ छेड़छाड़ किया जाएगा। मैंने वापस रखा क्योंकि यद्यपि उपयोगकर्ता सामग्री बनाते हैं, ऐसे समय आ सकते हैं जब कई उपयोगकर्ता सामग्री बनाते हैं और मैं अभी तक इसका सामना नहीं करना चाहता था। हालांकि धन्यवाद! – Finnjon

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