1

Voilà mon avis:Rails - En utilisant un argument comme un attribut de modèle

<%= check_box_tag :age_visible, 1, checked?(:age_visible) %> 

Ceci permet d'accéder à la méthode d'assistance:

def checked?(pref) 
    if @user.preferences.pref == "1" 
    true 
    else 
    false 
    end 
end 

Je veux que l'aide à l'autre:

if @user.preferences.age_visible == "1" 

donc il va vérifier la base de données pour voir si l'utilisateur a déjà choisi de montrer leur âge et si oui, la case à cocher sera cochée; sinon, non. En ce moment, il passe simplement faux, mais passera vrai si j'écris "@ user.preferences.age_visible" dans l'assistant. Mais, bien sûr, je veux être capable d'utiliser l'assistant pour d'autres attributs.

Répondre

0

La réponse de Davidb est correcte, mais pour les prochains cas où vous souhaitez appeler une méthode dynamiquement, vous pouvez utiliser send. Par exemple. comme ceci:

@user.preferences.send(:age_visible) 

Juste une petite astuce pour rendre votre aide plus concise:

@user.preferences.send(pref) == "1" 

retourne déjà un booléen, vous pouvez réécrire votre aide comme ceci:

def checked?(pref) 
    @user.preferences.send(pref) == "1" 
end 
+0

Super! Merci pour la réponse rapide. Exactement ce que je cherchais. – Lee

+0

@Lee, en fait je pense que la réponse de Davidb ci-dessous est meilleure. – Mischa

+0

Voir ma réponse ci-dessous ... Je n'utilise pas de colonnes séparées pour chaque attribut, mais une colonne de préférences utilisant OpenStruct. – Lee

1

Vous n'avez pas besoin d'aides supplémentaires. Lorsque vous créez un champ booléen dans la base de données, ActiveRecords fournit une méthode pour interroger si elle est définie sur true ou non. Essayez ceci:

<%= check_box_tag :age_visible, 1, @user.age_visible? %> 
+0

Je n'utilise pas de champ booléen car je devrais créer une colonne séparée pour chaque attribut que je voudrais basculer. Au lieu de cela j'ai une colonne de préférences pour chaque utilisateur qui a l'information ... Je l'ai testé, et @ user.preferences.age_visible == "1" fonctionnerait dans la vue, mais l'aide semble plus propre. – Lee

Questions connexes