【发布时间】:2015-08-25 12:32:59
【问题描述】:
有一个非常简单的控制器动作来改变一个叫做“草稿”的布尔值的状态
@interview.draft = true if @interview.draft == false
@interview.draft = false if @interview.draft == true
@interview.save!
这仍然失败,在模型中我没有更改布尔值的操作,它不会正确保存状态。知道为什么会这样吗?
我正在使用 postgres 和 rails 4,我在迁移中将其设置为默认值,并防止草稿列出现空值。
【问题讨论】:
-
这将始终返回 false,因为它在到达第二行时始终为 true。它应该做什么?如果您只想翻转值,可以使用
@interview.draft = !@interview.draft -
您的
@interview实例是否有任何错误?或任何其他错误? -
你也可以使用
toggle!。 apidock.com/rails/v4.2.1/ActiveRecord/Persistence/toggle! -
@EgonWilzer 我很确定你已经回答了。为什么要在评论中回答?现在 OP 将没有“答案”可以接受,而且你不会得到那么多分。
-
如果您想在保存之前先分配
draft值,您也可以使用toggle(不带 bang(!)),因为toggle!(带 bang)会自动更新/保存 @ 987654329@立即记录在数据库中。
标签: ruby-on-rails activerecord boolean record