Afficher un attribut venant d'un modèle associé dans une vue

Par keilo, il y a 9 ans


Bonjour,

Je voudrais savoir si il y avait une meilleur façon d'afficher un attribut provenant d'une association.

Voici le code de mon premier modèle

class Model1 < ApplicationRecord has_many :model2 end

Voici le code de mon deuxieme modèle

class Model2 < ApplicationRecord has_one :model1 def get_name Model1.find(model1_id).name end end

Et ma vue

<%= model2.get_name %>

Y-a t'il une meilleur façon de traiter cet affichage ?
PS: RAILS 5

4 réponses

kal-el, il y a 9 ans

Tu n'as pas besoin de manuellement trouver l'enregistrement associé, ApplicationRecord le fera pour toi. Tu as déjà définit la relation has_one :model1. Tout ce que tu as à faire est de l'appeler depuis une instance de Model2:

<%= model2.model1.name %>

Tu peux aussi utiliser la délégation (Loi de Déméter , bien qu'inutile dans ce cas précis) pour avoir un équivalent de ce que tu voulais au niveau de l'appel:

class Model2 < ApplicationRecord has_one :model1 delegate :name, to: :model1, prefix: true end

Ce qui te permet de récupérer le nom de model1 comme ceci:

<%= model2.model1_name %>
keilo, il y a 9 ans

Merci de ta réponse, j'ai cependant un problème : l'affichage dans ma vue en passant par model2.model1.name fonctionne uniquement si j'ai une relation de type belongs_to mais ne fonctionne pas avec has_one dans mon Model2
Sais-tu à quoi c'est dû ?

keilo, il y a 9 ans

Problème résolu merci :)