Ruby on Rails: как мне установить переменную, где изменяемая переменная может измениться? - PullRequest
0 голосов
/ 15 июля 2010

я хочу сделать

current_user.allow_????? = true

, где ????? может быть тем, что я хотел, чтобы оно было

Я видел, как это делалось раньше ... просто не помню, где или как это называется.

Ответы [ 2 ]

2 голосов
/ 15 июля 2010
foo = "bar"
current_user.send("allow_#{foo}=", true)

EDIT:

то, что вы просите в комментарии, это совсем другое. Если вы хотите получить константу, вы должны использовать, например,

role = "admin"
User.const_get(role)  
0 голосов
/ 15 июля 2010

Это «волшебный метод», и вы реализуете method_missing для вашего объекта current_user. Пример из Шаблоны проектирования

#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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...