【问题标题】:Rails: NoMethodError - undefined method 'save'Rails:NoMethodError - 未定义的方法“保存”
【发布时间】:2014-04-28 02:06:52
【问题描述】:

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

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,但不确定用什么替换它,因为当项目保存到我的数据库时我需要以某种方式重定向页面?

为什么会出现这个错误?

谢谢

【问题讨论】:

  • @Pavan 抱歉,#<0x007fc46857b820>

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


【解决方案1】:

发生此错误是因为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 方法。

【讨论】:

  • 哦,谢谢您的精彩回答!是啊,你说得对。我应该把它放在 Hours 控制器中......我真的很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多