在我的控制器中我有这个:
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
,但不确定要替换它的原因,因为当项目保存到我的数据库中时,我需要以某种方式重定向页面?
为什么会出现此错误?
由于
答案 0 :(得分:5)
发生此错误是因为map
返回了一个数组,并且您尝试在其上调用save
。 Ruby中的数组没有定义方法save
,因此错误。
为什么你要尝试save
? create
将验证记录并将其保存到数据库(如果它有效)。您可能希望使用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
方法。