2011-12-14 4 views
0

Я пытаюсь захватить объект класса в вызове, который я делаю, но единственное место, которое я могу найти, находится в params[:controller]. Но это возвращает строку.Можете ли вы найти доступный класс только с строкой?

Могу ли я найти объект класса только с строкой?

+0

Откуда вы звоните, и что вы пытаетесь передать в качестве параметра? Если вы находитесь в контроллере, используйте 'self'. Тем не менее, я очень скептически отношусь к тому, что прохождение вокруг контроллера - отличная идея. –

ответ

2

Там в classify метод, который вы можете использовать, чтобы преобразовать строку соответствующим образом именованная константа, которая в сочетании с const_get должно быть то, что вам нужно. Вот упрощенный пример, у меня нет консоли Rails на данный момент:

ObjectSpace.const_get ("массив" .capitalize) .new # => []

В Rails что-то вроде

"array".classify.constantize.new 

также должно работать.

0

для строки в класс, вы можете использовать string.constantize. Но вы ищете текущий объект контроллера, который обрабатывает запрос?

1

Вы можете преобразовать строку в классе по этому пути:

"class".capitalize.constantize 
0

Вот как это сделать без Rails/ActiveSupport.

def constant_from_full_name(name) 
    name.split("::").inject(::Object) do |const_so_far, name_fragment| 
    const_so_far.const_get(name_fragment) 
    end 
end 

constant_from_full_name("Some::Path::To::My::Class") 
Смежные вопросы