Accéder aux propriétés du modèle dans les Rails
Donc en gros, j'ai un contrôleur. quelque chose comme ceci
def show
@user = User.find[:params[id]]
#code to show in a view
end
Utilisateur possède des propriétés telles que le nom, l'adresse, le sexe, etc. Comment puis-je accéder à ces propriétés dans le modèle? Puis-je surcharge le modèle accesser pour nom par exemple et de le remplacer par mon propre valeur ou concaténer quelque chose. Comme dans la série.html.erb vue pour cette méthode, je pourrais avoir besoin de concaténer le nom de l'utilisateur avec "Monsieur" ou "Madame", en fonction sur le genre? Comment est-il possible?
Vous devez vous connecter pour publier un commentaire.
Je n'hésiterais pas à remplacer les attributs, et au lieu de les ajouter au modèle comme ceci:
Cependant, vous pouvez accéder aux champs directement comme ceci:
Vous pouvez créer des attributs à l'intérieur de votre modèle pour représenter ces structures.
Il y a un railscast sur ce sujet, mais en résumé, vous pouvez faire quelque chose comme ceci dans votre modèle
Si vous souhaitez modifier explicitement la valeur d'un attribut lors de la lecture ou de l'écriture, alors vous pouvez utiliser le read_attribute ou write_attribute méthodes. (Bien que je crois qu'il est peut être obsolète).
Ces travaux par le remplacement de la méthode d'accesseur de l'attribut avec votre propre. Comme un exemple, une branche de l'identificateur de champ peut être saisi sous la forme de xxxxxx ou xx-xx-xx. Ainsi, vous pouvez modifier votre branch_identifier= méthode pour supprimer les tirets lorsque les données sont stockées dans la base de données. Ceci peut être réalisé comme
Si vous êtes l'accès à des données directement dans la base de données, vous pouvez le faire en vous vue:
etc.
Si vous avez besoin de créer des représentations de données, alors vous aurez besoin pour créer des aides, ou d'étendre le modèle (comme ci-dessus).
J'ai tendance à utiliser des méthodes d'assistance ajoutée au modèle pour des choses comme ça:
(Éditer le post précédent. Regardé en arrière à mon code, et a réalisé les helpers sont censé être pour la présentation liée (mark-up) des trucs uniquement.)
(Modifier de nouveau pour supprimer à gauche de paramètre... ben mon vieux, pas assez de café ce matin.)
(Modifier à nouveau pour le remplacer $ avec #... peut-être que je devrais juste le supprimer hein?)
Vous pouvez facilement surcharger les attributs comme vous le suggérez.
c'est à dire si le nom est un champ dans la table de base de données, vous pouvez le faire:
La
read_attribute
fonction retournera la base de données de la colonne valeur pour le champ.Mise en garde: je ne suis pas sûr que ce soit une bonne idée. Si vous voulez une méthode qui affiche les données du modèle dans une version modifiée de façon, je serais tenté de ne pas surcharger les méthodes par défaut, et de les appeler quelque chose de différent - cela permettra d'éviter un certain niveau de dissimulation.
Documentation ici: http://api.rubyonrails.org/classes/ActiveRecord/Base.html (sous l'Écrasement par défaut accesseurs')
dans http://api.rubyonrails.org/classes/ActionController/Base.html
de recherche pour