7
votes

Comment accédez-vous une valeur d'un objet (activeRecord :: relation) par clé dans Ruby sur rails?

tl; dr comment puis-je obtenir la valeur correspondante avec la clé d'un objet?

Je suis confus pourquoi

ATag.where (tag: 'Marque') me donne ce que j'appellerais un objet faute d'un meilleur terme: # ]>

Mais je dispose de la base difficile d'accéder à la valeur correspondante pour la clé: ID.

ATag.where (tag: 'marque'). ID et ATag.where (tag: 'Marque') [: id] et ATAG. Où (tag: 'marque') (: id) Toutes les erreurs de lancement, alors que dans ce cas, j'essaie d'avoir l'entier 1 retourné.

Je semble être incapable de vous ruby, ni de trouver une réponse succincte à cette question fondamentale avec mes compétences de recherche de Google (ou de manquer de).

merci


2 commentaires

ah a attag.where (tag: 'marque') [0] .Id et cela a fonctionné


Je vois que la méthode "où" a renvoyé un objet d'objets, donc je devais spécifier que je voulais le premier objet.


4 Réponses :


6
votes

Obtenez l'identifiant de votre tag = 'Marque' avec la requête suivante:

Atag.find_by(id: 1) #gives the Atag with id 1 
Atag.find_by_id(1). # same as above.
Atag.find_by(id: 999) #if not found then simply returns nil. 
Atag.find_by(name: 'ruby') #return Atag object with name: 'ruby'
Atag.find_by_name('ruby') #same as above. 


6 commentaires

Ceci est utile, mais différent de ce que je cherchais, car je devais pouvoir récupérer la valeur avec des connaissances uniquement de la clé. Vos exemples semblent assumer la connaissance de la clé et de la valeur pour récupérer l'objet. La raison pour laquelle je récupère les objets par: la balise au lieu de: ID est parce que j'ai la valeur de: tag mais pas le: id (qui est ce que j'essaie d'obtenir). Il y a presque certainement un meilleur moyen de mettre en œuvre ce que j'essaie de jouer avec des associations de dossiers actives, mais je travaille simplement sur une implémentation à partir de zéro pour le moment pendant que je suis plus confortable et inspiré en progressant.


Je ne suis pas grand sur la lecture de documents, sauf le strict minimum, mais à un moment donné dans un avenir proche, je vais bien passer à travers guides.rubyonrails.org/association_basics.html Si je suis trop bloqué: p


@Laser, essayez-vous d'obtenir tous les objets ATAG ayant un nom de balise commun? Tout comme tu as fait Atag.where (tag: 'marque')? Ensuite, vous pouvez essayer Atag.Find_By (Tag: 'Marque')


Ah oui c'est beaucoup plus propre! Merci :)


Pouvez-vous éditer la réponse afin que la solution soit au sommet 'ATag.Find_By (Tag:' Marque '). Id' ou 'ATag.where (tag:' Marque '). PREMIER.ID'?


Super, merci :) j'espère que ça va être utile à quelqu'un à un moment donné



1
votes

Yep, on dirait que vous l'avez compris. Pour référence, vous pouvez utiliser ATag.where (tag: 'marque'). Premier pour obtenir le premier résultat, et ATag.where (tag: 'Marque'). TO_A Pour obtenir un tableau de tous les résultats correspondants.


0 commentaires


0
votes

où code> instance de retour de activerecord :: relation em> qui peut être traité comme un tableau de tableau fort> avec ses membres. Même si le résultat est célibataire, il convient d'accéder à un élément de matrice avec un seul élément p>

Atag.find_by(tag: 'brand').id


0 commentaires