Вложенные ресурсы в пространстве имен form_for
Проблема
Помощник form_for неверно определяет путь к моему вложенному ресурсу внутри пространства имен. Рассматриваемые модели: Форум:: Тема и Форум:: Ответить, соответственно, находятся в подпапке под названием "форум" в моей директории моделей. Это находится в Rails 3 BETA 3.
routes.rb
namespace :forum do
root :to => 'threads#index'
resources :threads do
resources :replies
end
end
приложение/просмотров/форум/ответы/_form.html.haml
...
- form_for [@thread, @reply] do |f|
...
приложение/контроллеры/форум/replies_controller.rb
...
def new
@reply = Forum::Reply.new
end
...
Ошибка
undefined method `forum_thread_forum_replies_path'
В отношении строки, указанной выше в файле _form.html.haml
Ответы
Ответ 1
Отредактированное решение, если люди не читают реакции:
<%= form_for [:admin, @person, @image] do |f| %>
Старый ответ:
У меня есть проект с админ-пространством имен и ресурсами People и Images, так я строю свой form_for в rails3, я еще не нашел способ сделать это чище...
<%= form_for [@person, @image], :url => admin_person_images_path do |f| %>
Ответ 2
@Дуглас: Это не работает для меня. На мой взгляд, имена в маршрутах должны быть множественными. Когда мне это нравится, ошибка следующая:
undefined method `admin_admin_person_admin_image_path' for #<#<Class:0x55976d0>:0x55a9bc8>
Мое решение, которое работало для New:
form_for @image, url: admin_person_images_path(@person, @image)
Мое решение, которое работало в Edit:
form_for @image, url: admin_person_image_path(@person, @image)
Есть ли какое-нибудь решение объединить это в одной форме?
Изменить (решение для нового вложенного маршрута с именами в форме):
Теперь у меня была следующая логика в маршрутах. Rb
resources :mobile_users do
namespace :candystore do
resource :transactions
end
end
Форма для new_mobile_user_candystore_transactions
<%= form_for [@mobile_user], url: mobile_user_candystore_transactions_path(@mobile_user), method: :post do |f| %>
чтобы перейти к способу создания Candystore:: TransactionsController, а не к способу создания MobileUser или методу обновления Candystore:: TransactionsController.
Ответ 3
В Rails 3 единственное решение, которое работало для меня правильно (для нового и для редактирования ресурса):
form_for @image, :url => url_for([:admin, @person, @image])