在里面
before_action
@ad
是你从中得到的
set_ad
。它还没有更新,而且是新的
ad_params
尚未分配。所以
@ad.status
和
@ad.status_was
都是
pending
.
# this is what you're doing
@ad = Ad.first
@ad.status #=> "pending"
@ad.status_was #=> "pending"
# but you expect this, which doesn't happen
@ad.attributes = {status: "published"}
@ad.status #=> "published"
@ad.status_was #=> "pending"
# this happens only after the update
@ad.update({status: "published"})
@ad.status #=> "published"
@ad.status_was #=> "published"
@ad.status_previously_was #=> "pending"
在控制器中,您可以使用
after_action
,或者直接放进去
update
行动,因为你需要知道广告实际上已经成功更新。
在模型中
after_update
应该这样做。
使用
status_was
更改属性后。使用
status_previously_was
保存这些更改之后。