2017-02-07 3 views
1

Я получил настройку маршрутов, как следующее:Rails form_for как: с вложенным ресурсом

resources :projects do 
    resources :project_factors, as: factors 
end 

Мне нравится, имеющий as: :factors поэтому маршрут становится:

project_factor_path(@project, @project_factor) 

вместо

project_project_factor_path(@project, @project_factor) 

, но у меня возникли проблемы с получением form_for для генерации правильного маршрута.

form_for [@project, @project_factor] выходит из строя (как и ожидалось), потому что он пытается использовать project_project_factor_path, так что я пробовал:

form_for [@project, @project_factor], as: :factor 

, но это не удается с точно такой же ошибкой.

Есть ли способ получить рельсы для создания правильного пути здесь без явного задания правильного параметра url для случая создания и обновления?

+0

Этот предыдущий вопрос: http://stackoverflow.com/questions/10906793/how-to-generate-the-proper -url-for-a-nested-resource, похоже, указывает, что если вы используете пространство имен в имени класса, это может помешать автогенерации вашего маршрута из объекта ... вы назвали свой класс факторов проекта чем-то вроде: 'Project :: ProjectFactor' ??? –

+0

Нет, только что названный ProjectFactor: 'class ProjectFactor Jared

ответ

0

Не идеально, но вы можете пройти по пути отдельно к объектам, например, что-то вроде:

form_for [@project, @project_factor], :url => project_factor_path(@project, @project_factor) 

(Примечание: не тестировалось)

Он чувствует себя немного избыточным для меня, хотя ... это именно то, что вы пытались уменьшить, поэтому, вероятно, это нехорошее решение для вас: P

Альтернативой может быть просто переименование модели project_factor в factor. Вы все равно можете присвоить имя таблицы базы данных project_factors (используйте для этого в поле Rails, чтобы найти его) self.table_name = 'project_factors'.

Для меня, project/project_factors чувствует себя немного как Smurf-типирования ...;) YMMV

+1

Да, как я уже упоминал, явным образом устанавливаю URL-адрес, которого я пытаюсь избежать, с тех пор у меня должно быть условие для формы, если запись сохранена или не. Переименование модели на самом деле не вариант, ProjectFactor уже наследует от Factor. Мой вопрос действительно, почему 'as' в form_for не влияет на сгенерированный URL. – Jared

+0

да ... и я согласен, что это хороший вопрос (к которому я не знаю ответа) ... может стоить вникать в исходный код для 'url_for' (хотя это скорее всего будет кроличьим уорреном) –

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