zombies school rails learn for code ruby-on-rails ruby rails-for-zombies

ruby on rails - school - Rieles para Zombies Lab 4> Ejercicio 3



learn ruby on rails (10)

Pista original # 1

Querrás pasar params [: zombie] al método Zombie.create.

Pista original # 2

Luego usa el método redirect_to con el nuevo zombie para enviarlos al zombie_path correcto

Pista original # 3

Una posible respuesta correcta es:

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


Me quedé en el cuarto laboratorio de Rails for Zombies en el tercer ejercicio. Esta es mi tarea: crear una acción que creará un nuevo Zombie y luego lo redireccionará a la página de show del zombie creado . Tengo la siguiente matriz de parámetros:

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

Escribí el siguiente código como solución:

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

Pero cuando lo envío me sale el siguiente error:
#<TypeError: can''t convert Symbol into Integer>

Sé que cometí un error, pero no puedo averiguar dónde. Por favor, ayúdame.


En primer lugar estás cometiendo un error aquí.

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

debería ser

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

Puedes intentar hacer esto

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

Esto hace que tu código sea SECO , según wiki

"No se repita" (DRY) significa que la información se encuentra en un lugar único e inequívoco. Por ejemplo, al usar el módulo ActiveRecord de Rails, el desarrollador no necesita especificar los nombres de las columnas de la base de datos en las definiciones de clase. En su lugar, Ruby on Rails puede recuperar esta información de la base de datos basándose en el nombre de la clase.


No puedo descifrar ningún error en su código (excepto las cosas [ , ] pero creo que se produjo al pegar el código aquí, ya que es uniforme en todas partes y cuando lo probé, recibí otro error NoMethodError: undefined method ''[]'' for :zombie:Symbol ), pero puede refractarse definitivamente así:

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

Compruebe si el hash de params del controlador es exactamente el mismo usando p params .


Ya que la función zombie_params ya está definida, puedes usarla como parámetro para la función crear.

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


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

es la respuesta correcta


esto funciona para mi

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


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


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

Eso es lo que funcionó para mí.


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


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

es la respuesta correcta

(perdón por la doble publicación, no noté el cuadro de código la primera vez)