2012-01-11 14 views
7

मैं रेल, एमवीसी और सीआरयूडी के लिए बहुत नया हूं, और मैं एक पोस्ट पर वोटों की मात्रा बदलने के लिए अद्यतन विधि का उपयोग करने की कोशिश कर रहा हूं। मैं अपने पोस्ट नियंत्रक अद्यतन विधि में निम्नलिखित कोड है:ArgumentError: तर्कों की गलत संख्या (2 के लिए 1)

def update 
    @post = Post.find(params[:id]) 

    if params[:vote] == 'up' 
     @post.update_column(:ups => @post[:ups] + 1) 
    elsif params[:vote] == 'down' 
     @post.update_column(:downs => @post[:downs] + 1) 
    end 

    flash[:notice] = "Thanks for voting! This helps us determine important issues in our schools." 

    redirect_to 'Posts#index' 
end 

और मैं अपने routes.rb में निम्नलिखित कोड है:

OpenMCJC::Application.routes.draw do 
    root :to => 'posts#index' 
    resources :posts 
    match '/posts/:id/:vote', :to => 'posts#update' 
end 

करने के लिए "/ पोस्ट/3/अप" नेविगेट करने के बाद, यह निम्न त्रुटि फेंकता है: पेज के अनुसार

ArgumentError in PostsController#update 

wrong number of arguments (1 for 2) 

अनुरोध पैरामीटर जैसे:

{"id"=>"3", 
"vote"=>"up"} 

क्या आप मुझे यह जानने में मदद कर सकते हैं कि क्या गलत हुआ?

उत्तर

14

update_column दो तर्क लेता है। आप केवल एक गुजर रहे हैं।

बजाय

:

@post.update_column(:ups => @post[:ups] + 1) 

प्रयास करें:

@post.update_column(:ups, @post[:ups] + 1) 

यह दो तर्क की तरह लग सकता:

:ups => @post[:ups] + 1 

लेकिन यह वास्तव में एक हैश है।

के साथ और अधिक सामान्यतः update_attributes इस्तेमाल किया

, आप एक हैश पारित कर सकते हैं:

@post.update_attributes(:ups => @post[:ups] + 1) 
+0

इसने मुझे पहले काट दिया है। अफसोस की बात है। – courtsimas

7

मिशा के रूप में बताया, update_column दो तर्क लेता है। हालांकि, मैं आपको इस विधि का उपयोग करने से हतोत्साहित करता हूं। सबसे पहले, यह मान्यताओं को छोड़ देता है जो आप जो चाहते हैं वह नहीं हो सकता है। दूसरा, रेल के पास incrementing or decrementing values के लिए अंतर्निहित विधियां हैं। आपके मामले में, आप अपनी नियंत्रक विधि को इस तरह से बदल सकते हैं:

if params[:vote] == 'up' 
    @post.increment(:ups) 
elsif params[:vote] == 'down' 
    @post.increment(:downs) 
end 
+0

हाँ, उसे उन विधियों का उपयोग करना चाहिए: +1 – Mischa

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