ruby-on-rails – 如何在控制器操作中切换布尔属性
发布时间:2020-12-17 01:55:17 所属栏目:百科 来源:网络整理
导读:我有一个动作,只需将#active属性切换到相反的布尔状态: 如果@ blog.active == true,则将其更新为非活动状态 如果@ blog.active == false,则将其更新为活动状态 我在控制器中得到了以下自定义操作,但是必须有一些Rails方法才能更优雅地执行此操作: class Bl
我有一个动作,只需将#active属性切换到相反的布尔状态:
>如果@ blog.active == true,则将其更新为非活动状态 我在控制器中得到了以下自定义操作,但是必须有一些Rails方法才能更优雅地执行此操作: class BlogsController < ApplicationController ... def toggle_active if @blog.active? @blog.update(active: false) else @blog.update(active: true) end end end 是否有一种Rails方式将布尔属性更新为相反的布尔状态? 解决方法
Rails为此提供了
toggle ,但它不是原子的,你仍然需要调用save并考虑验证. bang-method替代方案将为您处理持久性,但会跳过验证.
最好明确你想要做什么.如果此操作是表单POST或XHR请求的结果,请接受您要设置的实际值(RESTful),而不是期望客户端知道数据库的当前状态. 所以虽然这有效: @blog.toggle(:active) ……这是非确定性的,可能导致与所需行动发生相反的情况.我建议改为: class BlogStatusController < ApplicationController # ... boilerplate to load @blog def update @blog.update(status_params) end protected def status_params params.require(:blog).permit(status: [:active]) end end 如果需要原子切换,可以使用方便的方法名称包装的SQL语句轻松实现它:https://stackoverflow.com/a/24218418/203130 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |