我在第三次演习中参加了僵尸实验室的第四次Rails。这是我的任务:创建将创建新Zombie的动作,然后重定向到创建的僵尸的节目页。
我有以下params数组:
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>
我知道我犯了一个错误,但我无法弄清楚在哪里。请帮帮我。
答案 0 :(得分:25)
def create
@zombie = Zombie.create(params[:zombie])
redirect_to @zombie
end
答案 1 :(得分: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“不要重复自己”(DRY)意味着 信息位于一个单一的, 毫不含糊的地方。例如,使用 Rails的ActiveRecord模块, 开发人员不需要指定 类中的数据库列名 定义。相反,Ruby on Rails 可以从中检索此信息 基于类名的数据库。
答案 2 :(得分:3)
我无法在您的代码中发现任何错误([
,]
除外,但我认为这是在粘贴代码时出现的,因为它始终是统一的,当我尝试时它,我得到了另一个错误NoMethodError: undefined method '[]' for :zombie:Symbol
),但它可以肯定地被折射成这样:
def create
@zombie = Zombie.new(params[:zombie])
if @zombie.save
redirect_to @zombie
else
render :action => :new
end
end
使用params
检查来自控制器的p params
哈希值是否完全相同。
答案 3 :(得分:1)
def create
@zombie = Zombie.create(params.require(:zombie).permit(:name, :graveyard))
redirect_to zombie_path(@zombie)
end
这对我有用。
答案 4 :(得分:1)
这对我有用
def create
@zombie = Zombie.create(zombie_params)
redirect_to zombie_path(@zombie)
end
答案 5 :(得分:0)
def创建 @zombie = Zombie.create(params [:zombie]) redirect_to时(@zombie) 端
是正确答案
答案 6 :(得分:0)
def create
@zombie = Zombie.create(params[:zombie])
redirect_to(@zombie)
end
是正确答案
(对不起双重帖子,第一次没注意到代码框)
答案 7 :(得分:0)
def create
@zombie = Zombie.create(params[:zombie])
redirect_to (zombies_path)
end
答案 8 :(得分:0)
你想把params [:zombie]传递给Zombie.create方法。
然后将redirect_to方法与新僵尸一起发送给 正确的zombie_path
可能的正确答案是:
def create
@zombie = Zombie.create(params[:zombie])
redirect_to zombie_path(@zombie)
end
答案 9 :(得分:0)
由于已经定义了zombie_params函数,因此您可以将其用作create函数的参数。
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