我有一个Airports
数据库,其中有一个region
“属性”。我以前曾使用region
方法Airport#region
管理Region
属性,该方法根据机场的属性查找Airport belongs_to :region
对象。
我现在添加了正式关系,以便Airports
。
当然,我现有的所有nil
当前都具有regions
Airport#region
。我已将旧的Airport#set_region
方法重命名为region ? region : set_region
。
我想要一个自定义吸气剂,它基本上可以region ||= set_region
,也称为region = set_region
。但是,当然,然后我得到一个循环。
set_region
可以完成工作,但是效率很低,因为我想它可以执行region
,即使已经分配了set_region
。
如果需要,我还希望能够设置“自定义”区域(以覆盖region = reg
save
会“计算”的任何内容)。以下解决方案不起作用。
第一个设置区域(在方法中的撬动会话中可见),但不会以某种方式保留,只要控制权返回到调用它的规范即可。
update(region: reg)
这只是循环。
{{1}}
答案 0 :(得分:0)
我自己弄清楚了。使用region_id
绕过Rails提供的辅助方法#region
和#region=
def region
if region_id
Region.find(region_id)
else
region = set_region
end
end
def region=(reg)
update(region_id: reg.id)
end
我很想知道是否有人知道这样做的不同方法。
我也非常想知道是否有办法让Region.find(nil)
返回nil
而不是抛出错误,所以我可以只做Region.find(region_id) || set_region
编辑:回答我刚刚问的问题(您知道,两行之前)-TADA!
def region
Region.find_by(id: region_id) || set_region
end