Преврати переменную строку в строгий объект - PullRequest
0 голосов
/ 05 ноября 2010

Я бы хотел иметь возможность создавать строку как %% variable %% и интерпретировать ее как объект метода, а не как объект строки. Так что %% UserDatabase.name %% будет читаться как @ DatabaseUser.name и впоследствии будет возвращать что-то вроде «Майкл».

Вот что у меня есть:

def parse_block(component)
  component.gsub!(/%%([a-z].*)%%/s, "@#{'\\1'}")
end

Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

1 голос
/ 05 ноября 2010

Я думаю, что лучше интерпретировать его перед повторным введением.

def parse_block(component)
  component.gsub!(/%%([a-z].*)%%/s) do |c|
    eval($1)
  end
end

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

0 голосов
/ 05 ноября 2010

Может быть, вместо этого вы могли бы передать название модели, идентификатор модели и желаемый метод? Таким образом, вы бы в конечном итоге с

def parse_whatever(model_name, model_instance_id, method)
  active_record_class = Kernel.const_get(classname)
  active_record_instance = active_record_class.find(model_instance_id)
  active_record_instance.send(method)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...