Rails中的减法

时间:2018-09-13 03:30:35

标签: ruby-on-rails

我有一个具有整数类型属性的对象。我想在执行特定操作后从属性中减去1。我在控制器中尝试过:

  def subtraction
    #find a item  and get the value, let's say value is 40
    item = Item.where(id: params[:id]).pluck(:value)

    # subtract 1 from the value and i thought it would be 40-1
    after_subtraction = item.to_i - 1

    #update the value
    final = item.update(value: after_subtraction)
  end

我得到:

NoMethodError (undefined method `to_i' for [40]:Array

当我删除to_i时,它说-不是一种方法。有什么方法可以更新储值吗?

4 个答案:

答案 0 :(得分:2)

更好的处理方法是

item = Item.find_by(id: params[:id]).value

pluck 将返回数组,在这种情况下这不是必需的。

答案 1 :(得分:1)

由于pluck返回一个数组,因此您不能在此处使用to_i进行转换。

看到您的代码,您可以像这样重构它,

  def subtraction
    # Find the item first
    item = Item.find(params[:id])

    # Subtract 1 from the value column of the item
    item.value -= 1

    # Save the modification of the item
    item.save!
  end

答案 2 :(得分:1)

根据您构造查询的方式,它会获取符合where条件的所有条目的值,因此.pluck方法返回的是一个数组,您无法在其中调用{ {1}}方法。

我想您要做的是从与查询匹配的第一个条目中提取所需的值,因此可以按以下方式重构

.to_i

答案 3 :(得分:0)

您不能直接将array转换为to_i。请使用以下方法

os.path.join()

是的,Nithin的答案更有效。您可以选择nithin的答案。在需要多个值的数组之前,无需使用 pluck