2011-03-07 15 views
17


मैं तीसरे अभ्यास में लाश प्रयोगशाला के लिए चौथे रेल में फंस गया। यह मेरा काम है: ऐसी क्रिया बनाएं जो एक नया ज़ोंबी तैयार करे और फिर बनाए गए ज़ोंबी के शो पेज पर रीडायरेक्ट करें। मैं निम्नलिखित पैरामीटर सरणी मिल गया है:लाश के लिए रेल लैब 4> व्यायाम 3

params = { :zombie => { :name => "Greg", :graveyard => "TBA" } } 

मैं एक समाधान के रूप में निम्नलिखित कोड लिखा है:

def create 
    @zombie = Zombie.create 
    @zombie.name = params[ :zombie [ :name ] ] 
    @zombie.graveyard = params[ :zombie [ :graveyard ] ] 
    @zombie.save 

    redirect_to(create_zombie_path) 
end 

लेकिन मैं निम्नलिखित त्रुटि हो गया, जब मैं इसे प्रस्तुत:
#<TypeError: can't convert Symbol into Integer>

मुझे पता है कि मैंने गलती की है लेकिन मैं कहां से पता नहीं लगा सकता। क्रिप्या मेरि सहायता करे।

+2

'ज़ोंबी' एक उपयोगी टैग नहीं है, क्योंकि यह स्वयं ही समझ में नहीं आता है। मैंने इसे 'रेल-के-ज़ोंबी' में बदल दिया है। –

+0

@skaffman अगर आपको 'रेल-के-ज़ोंबी' टैग पसंद नहीं है, तो कृपया इसके बारे में बताएं कि इसमें क्या गलत है। –

उत्तर

25
def create 
    @zombie = Zombie.create(params[:zombie]) 
    redirect_to @zombie 
end 
+0

यह ठीक काम किया, धन्यवाद! – nosferat

+6

आप केवल 'redirect_toate को पुनर्निर्देशित कर सकते हैं। (पैराम [: ज़ोंबी])' – jonnii

+0

मेरा समय बचाता है :) – apis17

4

सबसे पहले आप एक गलती यहाँ

@zombie.name = params[ :zombie [ :name ] ] 

कर रहे हैं यह

@zombie.name = params[:zombie][:name] 

होना चाहिए आप करने का प्रयास कर सकते हैं इस

def create 
    @zombie = Zombie.create(params[:zombie]) 
    redirect_to(create_zombie_path) 
end 

यह आपके कोड बनाता है DRY, प्रति विकी

"Don't repeat yourself"(DRY) means that information is located in a single, unambiguous place. For example, using the ActiveRecord module of Rails, the developer does not need to specify database column names in class definitions. Instead, Ruby on Rails can retrieve this information from the database based on the class name.

+0

से नीचे अनुराग आर्यन उत्तर देखें आपके पास @ zombie.name = params [: zombie] [: name]] – jhlllnd

+0

@jhllnd धन्यवाद पर एक टाइपो है। – Rohit

3

के रूप में मैं [, ] चीजों को छोड़कर अपने कोड (में किसी भी त्रुटि बाहर करने में सक्षम नहीं हूँ, लेकिन मैं, यहाँ कोड चिपका के रूप में यह भर में एक समान और जब मैं यह आया लगता है यह कोशिश की, मैं एक त्रुटि NoMethodError: undefined method '[]' for :zombie:Symbol) मिल गया है, लेकिन यह निश्चित रूप से इस तरह refractored जा सकता है:

def create 
    @zombie = Zombie.new(params[:zombie]) 
    if @zombie.save 
    redirect_to @zombie 
    else 
    render :action => :new 
    end 
end 

चेक कि क्या नियंत्रक से params हैश बिल्कुल p params उपयोग करके एक ही है।

0

def @zombie = ज़ोंबी बनाएँ।बनाने (पैरामीटर [: ज़ोंबी]) redirect_to (@zombie) अंत

सही जवाब

0
def create 
    @zombie = Zombie.create(params[:zombie]) 
    redirect_to(@zombie) 
end 

है सही जवाब है

(डबल पद के लिए खेद है, फ्लॉप कोड नोटिस पहली बार) बॉक्स

0
def create 
    @zombie = Zombie.create(params[:zombie]) 
    redirect_to (zombies_path) 
end 
0

मूल सुझाव # 1

You'll want to pass params[:zombie] to the Zombie.create method.

मूल सुझाव # 2

Then use the redirect_to method with the new zombie to send them to the right zombie_path

मूल सुझाव # 3

एक संभावित सही जवाब है:

def create 
    @zombie = Zombie.create(params[:zombie]) 
    redirect_to zombie_path(@zombie) 
end 
1
def create 
    @zombie = Zombie.create(params.require(:zombie).permit(:name, :graveyard)) 
    redirect_to zombie_path(@zombie) 
end 

क्या मेरे लिए काम किया है यही कारण है कि।

+0

अच्छा, धन्यवाद। दूसरों के लिए, ध्यान दें कि रेल के लिए मजबूत पैरामीटर्स का उपयोग करके यह करने का यह नया तरीका है। अन्य उत्तरों गलत नहीं हैं, लेकिन वे पुराने हैं (और संभावित रूप से असुरक्षित) –

1

इस काम करता है मुझे

def create 
     @zombie = Zombie.create(zombie_params) 
     redirect_to zombie_path(@zombie) 
end 
0

के बाद से zombie_params समारोह पहले से ही परिभाषित किया गया है, तो आप सिर्फ इसे बनाने के कार्य करने के लिए एक पैरामीटर के रूप में उपयोग कर सकते हैं।

class ZombiesController < ApplicationController 
    def create 
    @zombie= Zombie.create(zombie_params) 
    redirect_to @zombie 
    end 

    private 

    def zombie_params 
    params.require(:zombie).permit(:name, :graveyard) 
    end 
end 
संबंधित मुद्दे