Essayez d'utiliser l'attribut de requête Ruby on Rails

Conclusion: vous pouvez utiliser le nom d'attribut? Au lieu de blanc? Et présent? (Certains doivent être prudents)

Contexte: je voulais ajouter un tableau d'entiers (éventuellement nil)

Original mon code ...

[Voici un tableau d'objets avec hoge comme clé].reject(|obj| !obj.hoge.nil?).sum(:hoge)

reject(|obj| !obj.hoge.nil?)In hoge supprime les nuls,sum(:hoge)J'allais ajouter hoge sans supprimer.

Version modifiée

[Voici un tableau d'objets avec hoge comme clé].select(&:hoge?).sum(:hoge)

reject(|obj| !obj.hoge.nil?)Maisselect(&:hoge?)devenu. J'ai essayé de sélectionner celui que hoge? Évalue comme vrai, c'est ce que j'ai appris cette fois. Il est possible d'exprimer le nom de l'attribut?

Commentaire

Article similaire existe déjà Mon code original semble avoir été un mauvais code pour une mauvaise odeur. (Page de référence)

J'ai également regardé Rails body code. Cette déclaration de cas semble être la partie pertinente. Pour résumer l'énoncé de cas, ...

Premièrement, vrai est vrai, faux, nul est faux.

when true        then true
when false, nil  then false

Ensuite, il semble que le récepteur puisse être grossièrement divisé en cas avec et sans l'attribut spécifié.

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} sera vrai si le récepteur n'a pas le nom d'attribut correspondant. De plus,Numeric === value || !value.match?(/[^0-9]/)dans le cas de(Nombres), 0 est faux, sinon c'est vrai. Si ce n'est pas un nombre, il retournera faux s'il est faux, et vide? Si ce n'est pas le cas.

Ensuite, le récepteur a le nom d'attribut correspondant. Si value.respond_to? (: Zéro?) A zéro?, ! Value.zero? Est évalué comme étant faux quand il vaut 0, sinon c'est vrai. Si vous n'avez pas zéro?, Le résultat de! Value.blank? Semble être renvoyé.

Résumé

J'ai pensé qu'il pouvait être utilisé à la place de «attribuer le nom.blank?» Et «attribuer le nom.présent?» Dans de nombreux cas. Ce à quoi je veux faire attention, c'est que cela devient faux quand il est à 0. Il a également été mentionné dans Article de référence. Ce que je voulais faire, c'était simplement additionner, donc ce ne serait pas un problème si 0 était joué, mais je pensais que cela pourrait être un problème dans certains cas.

Merci d'avoir lu jusqu'ici. Veuillez signaler toute erreur et nous les corrigerons. (Cet article n'a rien à voir avec l'entreprise)

Recommended Posts

Essayez d'utiliser l'attribut de requête Ruby on Rails
[Ruby on Rails] Jusqu'à l'introduction de RSpec
[Ruby on Rails] Read try (: [] ,: key)
Connaissance de base de Ruby on Rails
[Rails] Enregistrez-vous par attribut du même modèle en utilisant Devise
(Ruby on Rails6) Affichage de la base de données qui a obtenu l'identifiant de la base de données
Supprimer tout le contenu de la page de liste [Ruby on Rails]
Une note sur la fonction de départ de Ruby on Rails
[Rails] Ajout de la fonction de commentaire Ruby On Rails
Essayez d'utiliser || au lieu de l'opérateur ternaire
[Ruby on Rails] Vérification du code à l'aide de Rubocop-airbnb
Essayez d'utiliser le service sur Android Oreo
[Ruby on Rails] Changez la destination de sauvegarde du recueil de gemmes * Remarque
Remarques sur l'utilisation de FCM avec Ruby on Rails
[Ruby on Rails] Notation japonaise de l'erreur
Explication de Ruby sur rails pour les débutants ①
[Ruby on rails] Implémentation d'une fonction similaire
Créez un grand nombre d'enregistrements avec une seule commande à l'aide du fichier seeds.rb Ruby on Rails
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
Comment résoudre la construction de l'environnement local de Ruby on Rails (MAC)!
Implémentation de la fonction de connexion Ruby on Rails (Session)
Quand le terminal Ruby on Rails revient en arrière
Recommandation de classe de service dans Ruby on Rails
Publiez l'application avec ruby on rails
Ruby on Rails ~ Principes de base de MVC et du routeur ~
[Ruby on Rails] Un mémorandum de modèles de mise en page
Déterminez la page actuelle avec Ruby on Rails
[Ruby on Rails] Affichage individuel des messages d'erreur
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
[Ruby on Rails] Comment faire de la destination du lien une partie de l'ID spécifié
[Ruby on Rails] Implémentez un graphique circulaire qui spécifie le pourcentage de couleurs
[Ruby on Rails] Comment japonaisiser le message d'erreur de l'objet Form (ActiveModel)
[Ruby on Rails] Communication asynchrone de la fonction de publication, ajax
[Introduction] Créer une application Ruby on Rails
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
[Ruby on Rails] Comment changer le nom de la colonne
[Ruby on Rails] Traitement commun entre les contrôleurs (à l'aide de concerts)
Rails6: saisissez les données initiales d'ActionText à l'aide de seed
Explication de Ruby sur rails pour les débutants ⑥ ~ Création de validation ~
Explication de Ruby on rails pour les débutants ② ~ Création de liens ~
(Ruby on Rails6) Refléter le contenu publié à partir du formulaire
Explication de Ruby on rails pour les débutants ⑦ ~ Implémentation Flash ~
[Ruby on Rails] Implémentation de la validation qui ne fonctionne que lorsque les conditions sont remplies
Record d'apprentissage de Ruby on rails -2020.10.03
Création de portfolio Ruby on Rails
Record d'apprentissage Ruby on rails -2020.10.04
Essayez d'utiliser Cocoa de Ruby
[Ruby on Rails] Debuck (binding.pry)