我有一个具有整数类型属性的对象。我想在执行特定操作后从属性中减去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
时,它说-
不是一种方法。有什么方法可以更新储值吗?
答案 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 。