Original mein Code ...
[Hier ist eine Reihe von Objekten mit hoge als Schlüssel].reject(|obj| !obj.hoge.nil?).sum(:hoge)
reject(|obj| !obj.hoge.nil?)
In hoge entfernt null,sum(:hoge)
Ich wollte Hoge hinzufügen, ohne dass etwas entfernt wurde.
[Hier ist eine Reihe von Objekten mit hoge als Schlüssel].select(&:hoge?).sum(:hoge)
reject(|obj| !obj.hoge.nil?)
Aberselect(&:hoge?)
wurde.
Ich habe versucht, die auszuwählen, die hoge? Als wahr bewertet. Dies habe ich diesmal gelernt.
Ist es möglich, den Attributnamen auszudrücken?
Ähnlicher Artikel existiert bereits Mein ursprünglicher Code scheint ein schlechter Code für schlechten Geruch gewesen zu sein. (Referenzseite)
Ich habe mir auch [Rails-Bodycode] angesehen (https://github.com/rails/rails/blob/7834363bbfdb68d734143063932ccc5a8814c97f/activerecord/lib/active_record/attribute_methods/query.rb). Diese Fallbeschreibung scheint der relevante Teil zu sein. Um die Fallaussage zusammenzufassen, ...
Erstens ist wahr wahr, falsch, null ist falsch.
when true then true
when false, nil then false
Als nächstes scheint es, dass der Empfänger grob in Fälle mit und ohne das angegebene Attribut unterteilt werden kann.
if !type_for_attribute(attr_name) { false }
if Numeric === value || !value.match?(/[^0-9]/)
!value.to_i.zero?
else
return false if ActiveModel::Type::Boolean::FALSE_VALUES.include?(value)
!value.blank?
end
elsif value.respond_to?(:zero?)
!value.zero?
else
!value.blank?
end
! Type_for_attribute (attr_name) {false}
ist true, wenn der Empfänger nicht über den entsprechenden Attributnamen verfügt.
Außerdem,Numeric === value || !value.match?(/[^0-9]/)
Im Falle von(Zahlen), 0 ist falsch, sonst ist es wahr.
Wenn es sich nicht um eine Zahl handelt, wird false zurückgegeben, wenn sie falsch ist, und leer, wenn dies nicht der Fall ist.
Als nächstes hat der Empfänger den entsprechenden Attributnamen.
Wenn value.respond_to? (: Null?)
Hat Null ?, Wird ! Value.zero?
Als falsch ausgewertet, wenn es 0 ist, andernfalls ist es wahr.
Wenn Sie keine Null haben, scheint das Ergebnis von! Value.blank? Zurückgegeben zu werden.
Ich dachte, es könnte anstelle von attribute name.blank?
Oder attribute name.present?
In vielen Fällen verwendet werden.
Ich möchte vorsichtig sein, dass es falsch wird, wenn es 0 ist.
Es wurde auch in [Referenzartikel] erwähnt (https://qiita.com/yusabana/items/67ae553824166a39b61e).
Was ich tun wollte, war einfach zu addieren, so dass es kein Problem wäre, wenn 0 gespielt würde, aber ich dachte, dass es in einigen Fällen ein Problem sein könnte.
Vielen Dank, dass Sie so weit gelesen haben. Bitte weisen Sie auf Fehler hin und wir werden sie korrigieren. (Dieser Artikel hat nichts mit der Firma zu tun)
Recommended Posts