Ruby类重写setter方法未触发导致@tables_ids为nil问题排查
问题成因
- 核心问题出在
initialize构造方法内的赋值逻辑:你写的tables_ids = table_ids是直接赋值给了方法内的局部变量,完全没有调用你重写的tables_ids=setter方法。Ruby语法规定,调用实例自身的setter方法时必须显式加self.前缀,否则会被识别为局部变量赋值操作。 - 你没有在构造方法内给实例变量
@tables_ids做任何初始化赋值,也没有触发setter对它赋值,所以最终实例的@tables_ids默认就是nil。
修复方案
只需要修改构造方法内的赋值语句,显式指定调用自身的setter方法即可:
def initialize(org, table_ids, offset, timezone, run_at) @org = org # 加self.前缀,触发你重写的setter方法 self.tables_ids = table_ids @offset = offset.to_i @timezone = timezone @run_at = run_at end
额外注意:请确保你代码中调用的tables_ids_for_subdomain方法已正确实现,可以返回对应全量表ID数组。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

