在Rails中如何判断collection_check_boxes的tag_item是否选中?
如何判断Rails collection_check_boxes中的选项是否已选中?
在Post的创建/编辑表单里用collection_check_boxes展示所有Tag选项时,想通过背景色区分选中状态、去掉原生复选框,但你当前用tag_item.check_box判断选中状态的方式不对——tag_item.check_box是生成复选框的方法,不是判断选中状态的属性。
正确的判断逻辑是:检查当前Tag是否在表单绑定的Post实例的已选标签ID数组里。修改后的代码如下:
<div class="flex flex-wrap gap-3"> <%= form.collection_check_boxes :tag_ids, Tag.all, :id, :name do |tag_item| %> <% # 判断当前标签是否已选中 %> <% is_selected = form.object.tag_ids.include?(tag_item.object.id) %> <%= tag_item.label class: "#{is_selected ? 'bg-red-500 text-white' : 'bg-gray-100'} select-none border border-gray-100 flex w-auto p-2 text-sm cursor-pointer text-center" %> <% # 隐藏原生复选框 %> <%= tag_item.check_box hidden: true %> <% end %> </div>
关键说明:
form.object:获取当前表单绑定的Post实例,它的tag_ids属性存储了已选中标签的ID数组tag_item.object:拿到当前循环遍历的Tag对象,通过对比ID判断是否被选中- 给
check_box加hidden: true:隐藏原生的复选框控件,只保留可点击的标签元素作为交互入口 - 额外添加
text-white:选中时文字颜色变白,和红色背景形成对比,提升可读性
内容的提问来源于stack exchange,提问作者bitsmyth
相关产品推荐
相关产品推荐

