2010-07-15 6 views

Répondre

2
foo = "bar" 
current_user.send("allow_#{foo}=", true) 

EDIT:

ce que vous demandez dans le commentaire est une autre chose. Si vous voulez saisir une constante, vous devez utiliser par exemple

role = "admin" 
User.const_get(role) 
+0

c'est un vrai slick. Que faire si vous voulez faire quelque chose comme? current_user.role = Utilisateur :: ?????? – NullVoxPopuli

+0

http://stackoverflow.com/questions/3256171/ruby-on-rails-how-do-i-set-a-variable-to-a-constant-where-part-of-the-name-of-t – NullVoxPopuli

0

C'est une « méthode magique » et vous mettre en œuvre le method_missing sur votre objet current_user. Exemple de Design Patterns

#example method passed into computer builder class 
builder.add_dvd_and_harddisk 
#or  
builder.add_turbo_and_dvd_dvd_and_harddisk 

def method_missing(name, *args) 
    words = name.to_s.split("_") 
    return super(name, *args) unless words.shift == 'add' 
    words.each do |word| 
    #next is same as continue in for loop in C# 
    next if word == 'and' 
    #each of the following method calls are a part of the builder class 
    add_cd if word == 'cd' 
    add_dvd if word == 'dvd' 
    add_hard_disk(100000) if word == 'harddisk' 
    turbo if word == 'turbo' 
    end 
end 
+0

J'aime mieux la méthode neutrino ci-dessus; plus facile à faire. –

+1

En fait, 'method_missing' est une chose complètement différente. l'auteur veut appeler une méthode d'un nom de variable, et cette réponse montre un moyen de rendre l'objet répondre à de tels appels. –

Questions connexes