ruby-on-rails - 覆盖 setter 属性不调用
问题描述
我创建对象 TriggerFillLocalRunAt。
如果属性 tables_ids 为空,则需要将此属性设置为所有 id。我想覆盖tables_ids 的getter。
class TriggersFillLocalRunAt
attr_reader :tables_ids
attr_reader :offset
attr_reader :timezone
attr_reader :org
attr_reader :run_at
def initialize(org, table_ids, offset, timezone, run_at)
@org = org
tables_ids = table_ids
@offset = offset.to_i
@timezone = timezone
@run_at = run_at
end
def tables_ids=(value)
@tables_ids = value ? value.split(' ').map(&:to_i) : tables_ids_for_subdomain
end
def perform
.................
end
end
我创建对象TriggersFillLocalRunAt.new(org, table_ids, offset, timezone, run_at).perform
其中 table_ids 为空
我的overide getter 没有调用并且@tables_ids 为空。
解决方案
在调用 setter 时,您总是需要显式使用 self :
def initialize(org, table_ids, offset, timezone, run_at)
@org = org
self.tables_ids = table_ids
@offset = offset.to_i
@timezone = timezone
@run_at = run_at
end
如果您不使用self
,您只需分配局部变量tables_ids
。我还建议您使用关键字参数,这样您就不必记住 5 个参数的顺序:
def initialize(org:, table_ids:, offset:, timezone:, run_at:)
@org = org
self.tables_ids = table_ids
@offset = offset.to_i
@timezone = timezone
@run_at = run_at
end
推荐阅读
- javascript - 无限反应自定义钩子渲染
- python - numpy RuntimeError 异常
- python - Pandas Python用第一个单元格中的相同值替换值
- arrays - 如何在 minizinc 中表示二维空间中的一个点?
- javascript - 对下拉列表进行排序
- python - __all__ 在特定文件中的用法
- c - 我怎样才能在OK之前添加消息?
- javascript - 将注册表单发送到 php 并通过 javascript 进行验证
- arrays - 数组数组的运行时数组赋值
- python - 什么 python 内置函数可以将一些函数应用于列表的每个元素?