2012-03-07 2 views
28

Например, я создал строку под названием «new_work_path», теперь я хочу назвать этот помощник как метод.Как динамически называть маршруты помощником в рельсах?

Я пробовал send("new_work_path", vars) и вызывал одну и ту же отправку из многих объектов. Но я не думаю, что нашел подходящий объект для вызова этих помощников.

object.send("new_work_path", vars), что объект Должен ли я искать?

Я попытался найти это в Интернете некоторое время, но ничего не смог найти. Если кто-то может осветить некоторые огни на этом, это было бы здорово!

Спасибо!

+3

методы Helper можно назвать только в контексте зрения, а не модель, если это то, что вы пытаетесь сделать. Можете ли вы уточнить, где вы пытаетесь выполнить это? Стандартный запрос 'send' должен быть достаточным, если у вас есть правильный контекст. – tadman

+0

Я пытаюсь выполнить это в application_helper, где стандартный вызов вспомогательного маршрута будет функционировать должным образом. – gtr32x

+3

Какая ошибка вы получаете? Можете ли вы опубликовать пример? Если вызов 'new_work_path' работает напрямую, то' send (: new_work_path) 'должен быть эквивалентным. – tadman

ответ

34

попробовать Rails.application.routes.url_helpers.send(...)

+0

Хорошо работает. Заслуживает «лучший ответ» :) –

+1

Это хорошо работает. Предположим, вы хотите ссылаться на вложенный ресурс, вы можете написать 'Rails.application.routes.url_helpers.send (" new _ # {@ model.class.name.downcase} _comment_url "," #{@model.class.name .downcase} _id ".to_sym => @model)', так как вам нужен родительский 'model_id'. – Avishai

+0

Если вы пытаетесь получить доступ к 'url_helpers' из смонтированного' Rails :: Engine', попробуйте '' :: Engine ".constantize.routes.url_helpers.send (...) 'где' 'находится в' mount' в файле 'routes.rb'. – erroric

8

Неплохо, по предложению @tadman, я снова попытался использовать send(:new_work_path, args), и это сработало! Должно быть, это было неправильно.

Прежде чем найти то, что направление работ сразу же, я нашел другое решение, которое также представляет интерес:

new_polymorphic_path(Work, args) 

который, кажется, предлагают некоторые синтаксический сахар, а также.

+0

Полиморфный путь - это весело, вы также можете использовать 'polymorphic_path (: foo)' или 'polymorphic_path (" bar ")' –

Смежные вопросы