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
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 %>
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û ?
Le problème doit venir de la structure de ta base de donnée. Je te renvoi à la documentation officielle pour plus d'info http://guides.rubyonrails.org/association_basics.html#the-has-one-association
A quoi ressemble ta base de donnée (pour ce cas)?