所以在我的rails表格中有几行2个文本字段。对于要保存的表单,至少需要填写一个对文本字段。
所以
nil nil
10 20
nil nil
nil nil
有效。
此:
nil nil
nil nil
nil nil
nil nil
无效
此:
nil 10
nil nil
nil nil
nil nil
无效
以下是我用来检查所有字段的方法(请注意,single_field和aggregate_field是字符串,是字段名称):
def no_values_present?(single_field, aggregate_field)
self.lo_item.lo_line_items.each do |item|
return false if "!item.#{single_field}".nil? && "!item.#{aggregate_field}".nil?
end
true
end
但是我想这不起作用,因为它会多次返回true或false,并且即使前一行可能有效,也会确定行无效。
我需要整体的真假。
如何实现这一目标?
答案 0 :(得分:1)
尝试利用setTimeout(1)
模块中的any?
或none?
。
您的代码可以重写为
Enumerable
虽然我认为条件是肯定的更清楚,并且在找到匹配时返回def no_values_present?(single_field, aggregate_field)
self.lo_item.lo_line_items.none? { |item|
!(item.send(single_field).nil?) && !(item.send(aggregate_field).nil?)
}
end
。我会写
true
请注意,def any_pairs_present?(single_field, aggregate_field)
self.lo_item.lo_line_items.any? { |item|
!(item.send(single_field).nil?) && !(item.send(aggregate_field).nil?)
}
end
永远不会是"!item.#{single_field}"
,因为它始终是一个字符串!如果您想动态访问实例字段,那么使用nil
的方法就是这样做,但对于其他选项,您可以查看here,其中建议send
和instance_eval
的替代方案
答案 1 :(得分:0)
该函数看起来没问题,但似乎存在语法错误,我还做了一些修改:
def form_valid?(single_field, aggregate_field)
self.lo_item.lo_line_items.each do |item|
return true if !item.send(single_field).nil? && !item.send(aggregate_field)
end
false
end