Les Variables d'Instance dans les Rails Modèle
Je veux initialiser une variable d'instance au sein de mon Rails modèle qui contiendra un tableau et je veux accéder à cette variable dans d'autres méthodes dans mon modèle. J'ai essayé ceci:
class Participant < ActiveRecord::Base
@possible_statuses = [
'exists',
'paired',
'quiz_finished',
'quiz_results_seen',
'money_sent'
]
def statuses
@possible_statuses
end
Mais quand j'ai essayé le suivant à l'aide de rails console:
Participant.first.statuses
Je suis retourné nul 🙁
Pourquoi cela se produit?
Est-il un moyen pour accomplir ce que je suis en train d'accomplir?
Vous devez vous connecter pour publier un commentaire.
Je vous conseille d'utiliser une constante pour ce genre de cas:
Si vous souhaitez accéder à ce tableau à partir de l'intérieur de la classe, il suffit de faire
STATUSES
, et de l'extérieur de la classe utiliserParticipant::STATUSES
La meilleure réponse pour moi était de créer une variable de classe, pas une variable d'instance:
Que je ne puis accéder librement dans les méthodes de la classe:
Dans votre exemple, @possible_statuses est une variable de la classe plutôt que sur chaque instance de l'objet. Voici une assez bavard exemple de comment vous pouvez accomplir cela:
Comme mentionné dans d'autres réponses, si la liste des statuts ne change jamais, vous devez utiliser une constante plutôt qu'une variable.
La variable d'instance ne peuvent exister que lorsque vous créez le modèle, puisqu'il n'est pas stockées dans une base de données de n'importe où. Vous souhaitez faire une constante, comme par Nobita de la suggestion. Alternativement, vous pouvez le faire d'un module de type...
Cela vous donne un peu plus de contrôle et de flexibilité, de l'OMI. Vous devez inclure ce code imbriqué dans votre modèle.