我正在Rails中构建一个基本的购物清单应用程序。每个"项目"有两个属性:name和checked。名称只是项目的名称。 Checked应该表明用户是否已经检查过#34;他们的杂货清单上的项目。
我在项目控制器中放了一个简单的方法来解决这个问题。问题是该方法只会将false更改为true。它不会反转并允许我取消选中项目。
这是方法,它在我的项目控制器中:
def checked
@item = Item.find(params[:id])
if !@item.checked
@item.update(checked: :true)
else
@item.update(checked: :false)
end
redirect_to root_path
end
这只适用于虚假到真实的对话。 if语句的后半部分似乎不起作用。思考?
答案 0 :(得分:3)
您确定要在其中使用符号:true
和:false
吗?
我想相信checked
是一个布尔字段,Ruby中的布尔等价物是true
和false
。
答案 1 :(得分:2)
不确定潜在原因(可能使用#update
),但我尝试将其编码更像:
def checked
@item = Item.find(params[:id])
if @item.checked
@item.update_attributes(checked: false)
else
@item.update_attributes(checked: true)
end
redirect_to root_path
end
......或......
def checked
@item = Item.find(params[:id])
@item.update_attributes(checked: !@item.checked)
redirect_to root_path
end
修改:@MrYoshiji评论时,请使用true
代替:true
等