如何在Rails 4中使用update_attributes?

6

我正在将我的应用程序从Rails 3.2升级到Rails 4。

出现了以下错误:

ArgumentError (argument out of range):

这个错误发生是因为以下代码行。
@lease.update_attributes(params[:lease])

我尝试使用更新,但仍然出现相同的错误。Rails 4 删除了update_attributes吗?如何使用它?

代码:

def terms_build_methods
  if @lease.blank?
    @lease = params[:current_lease_id].present? ? Lease.find_by_id(params[:current_lease_id].to_i) : Lease.create(params[:lease])
  else
    @lease.update(lease_params)
  end
  Lease.update_lease_occupancy_type(@lease)
  Lease.update_lease_status(@lease)
end

private

def lease_params
  params.require(:lease).permit!
end

不,它没有被移除。params[:lease] 中是什么? - Amit Thawait
a) params[:lease] 中包含什么内容? b) 你的模式文件或 SQL 中的租赁表是什么样子的? - ABMagil
2个回答

8

只需使用@lease.update(lease_params),并在控制器中添加一个私有方法即可

def lease_params
  params.require(:lease).permit!
end

是的,在更新了代码后,仍然抛出相同的错误(在控制器中添加了私有方法)。 - kannathasan
你的创建条件是错误的,而且也不确定 Lease.update_lease_occupancy_type(@lease) 和 Lease.update_lease_status(@lease) 方法是否存在问题。如果你注释掉除了 @lease.update(lease_params) 之外的所有代码会更好。另外,我没有看到这个 @lease 对象在代码中被初始化过,你是怎么得到它的? - Sabyasachi Ghosh
没有其他代码问题。我已经检查过,删除@lease.update(lease_params)代码后,它可以进入下一级。 - kannathasan
你是如何获取 @lease 变量的? - Sabyasachi Ghosh
那我不确定代码出了什么问题。如果它在公共git中,我需要检查整个代码库,然后通知你。无论如何,我发布的都是每次都有效的标准方法。 - Sabyasachi Ghosh
显示剩余5条评论

-2

3
问题讨论的是update_attributes而不是update_attribute。这两种方法是不同的(实际上,这里的混淆正是你链接的提交要解决的问题)。 - ABMagil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接