【发布时间】:2023-12-28 10:43:02
【问题描述】:
据我测试,这个辅助方法完全按照它的意图工作,但是我想知道是否有任何更简单、内置或更智能的方法来运行此检查!我也知道在 ApplicationHelper 中有这个可能并不理想。不确定我是否应该将其放在父对象(Inspection)、其他模型中,还是保持原样。
对于is_model_empty?,我需要遍历十一个不同(但相似)模型中的任何一个的每个字段,以检查它们是否都是空的。除了永远不会为空的 :id、:inspection_id、:created_at 和 :updated_at 字段之外的所有这些字段。 Empty 可以是 nil,可以是 [],也可以是 ['']。一个空字符串实际上意味着用户输入了一些内容,因此不会被包含在内。该值可以是字符串或数组,因此 .empty? 将不起作用。
def is_model_empty?(model)
model.attributes.each do |k, v|
unless ['id', 'inspection_id', 'created_at', 'updated_at'].include?(k)
return false unless v.nil? || v == [] || v == [""]
end
end
true
end
十一个模型都属于Inspection,每个模型都有has_one关系:
has_one :first_info_section
has_one :second_info_section
has_one :third_info_section
任何建议/反馈将不胜感激。感谢阅读!
-戴夫
【问题讨论】:
-
您的代码将始终返回
true。在初始分配之后,您永远不会向answer分配任何东西。 -
感谢Jordan,但只要字段中的值不等于nil、[]或[""],它就会自动退出方法并返回false。 (
return false unless v.nil? || v == [] || v == [""])。只需要一个字段中有一些文本或一个数组就可以告诉方法它不是空的! -
哦,我明白你的意思了,大卫。在那种情况下,如果您可以将
true放在底部,为什么还要分配answer? ;) -
Lol 刚刚对其进行了编辑,感谢 Jordan!
标签: ruby-on-rails ruby oop model helper