Rails:NoMethodError - 未定义的方法' save'

时间:2014-04-28 02:06:52

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 controller

在我的控制器中我有这个:

def hours_create
  @hour = params[:hour].map { |hour_attrs| Hour.create(hour_attrs) }  
  if @hour.save
    redirect_to :back, notice: "hour created."
  else
    render :new
  end
end  

错误来自@hour.save,但不确定要替换它的原因,因为当项目保存到我的数据库中时,我需要以某种方式重定向页面?

为什么会出现此错误?

由于

1 个答案:

答案 0 :(得分:5)

发生此错误是因为map返回了一个数组,并且您尝试在其上调用save。 Ruby中的数组没有定义方法save,因此错误。

为什么你要尝试savecreate将验证记录并将其保存到数据库(如果它有效)。您可能希望使用create!来拯救失败时引发的ActiveRecord::RecordInvalid错误:

def hours_create
  begin
    params[:hour].each { |hour_attrs| Hour.create!(hour_attrs) }  
  rescue ActiveRecord::RecordInvalid
    render :new
  else
    redirect_to :back, notice: "hour created."
  end
end  

为什么此操作称为hours_create?这是一个代码味道imo。听起来它应该在它自己的一个名为Hours的控制器中,它本身有一个create方法。