僵尸实验室4的路轨>练习3

在第三次练习中,我参加了僵尸实验室的第四次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 

但是当我提交它时,我收到以下错误:
#

我知道我犯了一个错误,但我无法弄清楚在哪里。 请帮我。

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

首先,你在这里犯了一个错误

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

它应该是

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

你可以尝试这样做

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

根据维基,这会使您的代码干掉

“不要重复自己”(DRY)意味着信息位于一个明确的地方。 例如,使用Rails的ActiveRecord模块,开发人员不需要在类定义中指定数据库列名。 相反,Ruby on Rails可以根据类名从数据库中检索此信息。

我无法在你的代码中发现任何错误(除了[]之外的事情,但我认为它是在粘贴代码时出现的,因为它在整个过程中是统一的,当我尝试它时,我得到了另一个错误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 

通过使用p params检查来自控制器的params散列是否完全相同。

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

这对我有用。

这对我有用

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

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

是正确的答案

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

是正确的答案

(对不起双重post,第一次没注意到代码框)

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

原始提示#1

你想要将params [:zombie]传递给Zombie.create方法。

原始提示#2

然后使用redirect_to方法和新的僵尸将它们发送到正确的zombie_path

原始提示#3

一个可能的正确答案是:

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

由于已经定义了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 
Interesting Posts