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)