能否在Postgres Array字段中使用attr_writer?存值异常求助
问题解决
你遇到的核心问题是自定义赋值方法没有正确将处理后的值绑定到实例变量,导致Rails无法识别要保存的数据:
compact_blank的使用误区:compact_blank方法不会修改原数组,而是返回一个去除了空白元素的新数组,你直接调用但没把结果赋值给实例变量,等于没做任何处理。- 未正确赋值实例变量:Rails的属性赋值依赖实例变量(比如
@multiple_response)来传递数据给数据库,你的自定义方法没有把处理后的值存入这个变量,所以数据库接收不到任何内容。
正确的赋值方法写法
直接在方法里将处理后的数组赋值给对应的实例变量即可:
def multiple_response=(val) @multiple_response = val.compact_blank end
如果你的Rails版本低于6.1(compact_blank是6.1新增的方法),可以用reject替代:
def multiple_response=(val) @multiple_response = val.reject(&:blank?) end
这样处理后,提交的数组会自动去掉空字符串,最终存入数据库的就是['a', 'c']这类干净的数组了。
内容的提问来源于stack exchange,提问作者Petercopter
相关产品推荐
相关产品推荐

