Динамическое создание маршрута RESTful с использованием Rails

Я пытаюсь написать вспомогательный метод, который принимает имя ресурса во множественном числе и возвращает соответствующую ссылку. Суть метода заключается в следующем:

def get_link(resource)
  link_to "#{resource.capitalize}", resource_path
end

Очевидно, что часть resource_path выше не работает. Я хотел бы иметь возможность пройти foos, чтобы получить foos_path и bars, чтобы получить bars_path и т. д. Как я могу это сделать? Я не могу понять синтаксис.


person John Topley    schedule 13.04.2009    source источник


Ответы (3)


def get_link(resource)
  link_to(resource.to_s.titleize, send("#{resource}_path"))
end

Вызов to_s для ресурса предназначен для поддержки передачи символов в качестве ресурса. Так

get_link("foos")

будет работать, а также

get_link(:foos)
person Michael    schedule 13.04.2009

Если вы хотите построить маршрут RESTful с членом:

send("edit_#{resource}_path".to_sym, @resource)
person benr75    schedule 30.03.2010

person    schedule
comment
Спасибо, отлично работает. Из интереса, что является получателем отправленного сообщения в этот момент? - person John Topley; 13.04.2009
comment
Чтобы ответить на мой собственный вопрос: когда получатель не указан, он сам, в данном случае это ActionView::Base, потому что он находится во вспомогательном методе. - person John Topley; 18.04.2009