2011-03-07 28 views
17


3回目の練習で4回目のRomb for Zombiesラボにはまった。これは私の仕事です:新しいゾンビを作成し、作成したゾンビのショーページにリダイレクトするアクションを作成します。 私は、次のparams配列持っている:Rails for Zombiesラボ4>演習3

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

    redirect_to(create_zombie_path) 
end 

しかし、私はそれを提出したとき、私は次のエラーました:私は解決策として、次のコードを書いた

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


#<TypeError: can't convert Symbol into Integer>

私は間違いをしたことを知っていますが、私はどこにいるのか分かりません。私を助けてください。

+2

「ゾンビ」はそれ自身では意味をなさないので、有用なタグではありません。私はそれを 'ゾンビの手綱 'に変更しました。 –

+0

@skaffman 'rails-for-zombies'タグが気に入らなければ、何が間違っているのか説明してください。 –

答えて

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

これはうまくいきました、ありがとう! – nosferat

+6

また、 'redirect_to Zombie.create(params [:zombie])'を実行することもできます。 – 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 

をやって試すことができますドライヤは、ウィキ

"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することができます:コントローラからparamsハッシュはp paramsを使用して、まったく同じであるかどうかを

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

チェック。

0

def create @ zombie =ゾンビ。 redirect_to(@zombie) 終了

正解

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

が正解

です(ダブルポスト申し訳ありません、コードを気づくdidntは:([ゾンビ]のparams)を作成初めて箱)

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

ニース、ありがとう。他の人には、これはStrong Parameters for Rails 4を使って行う新しい方法です。他の答えは間違っていませんが、古くなっています(潜在的に危険です) –

1

zombie_params機能がすでに定義されているので、これは私

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

のために働く、あなただけの作成関数にパラメータとして使用することができます。

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