2012-06-13 5 views
2

Это довольно сложно. Но у меня есть пути с именами, и эта форма заботится о модели клиента, которая разделяется двумя разными контроллерами.Каков правильный синтаксис для настройки этой формы_for?

моих маршруты:

namespace "self_service" do 
    resources :customers 

моей паршивая попытка реализованной формы редактирования

= form_for [:self_service, @current_customer], action: 'update', method: :put do |f| 

мой контроллер

class SelfService::CustomersController < SelfService::BaseController 
    layout 'self_service' 

    def edit 
    end 

    def update 
    end 
end 

Это конкретизация делает 2 вещи, которые являются неправильными:

  1. URL-адрес для формы является /customers/146/self_service. Но разве это не должно быть наоборот? Не должно быть self_service/customers/146/?

  2. Когда я нажимаю отправить, я получаю No route matches "/customers/146/self_service"

Обновление

Как выясняется, это ..:

resources :customers do 
    member do 
    get :self_service 

..contradicts это:

namespace "self_service" do 
    resources :customers 
    end 

Но что меня беспокоит, почему они должны противоречить друг другу? Нужно быть:

customers/:id/self_service 

, а другой:

self_service/customers/:id 
+0

Возможный дубликат [Rails Маршруты Пространства имен и form_for] (http://stackoverflow.com/questions/3853531/rails-routes-namespaces-and-form-for) – Mischa

+0

Я не думаю, что вам нужно указать пространство имен в form_for –

+0

Не дубликат – Trip

ответ

1

Синтаксис используется для вложенных ресурсов. Вам не нужно указывать пространство имен в form_for. Попробуйте:

= form_for @current_customer do |f| 

- EDIT -

Моя ошибка. Но, основываясь на ответе here, кажется, что вы делаете правильно. Не могли бы вы попробовать,

= form_for [:self_service, @current_customer] do |f| 

и в маршрутах, использовать символ вместо строки, т.е.

namespace :self_service do 
    resources :customers 
end 

Не уверен, если это будет работать, но стоит выстрел.

- EDIT 2 -

Ive также установка фиктивный проект here с ресурса пространства имен. Я использовал генератор эстакад рельсов, и это то, что он создал. Он создает форму по мере необходимости. Вы могли бы следовать этому примеру.

+0

Если эта настройка соответствует правильной форме, она переходит к неправильному контроллеру. Я бы хотел, чтобы это вместо этого перешло на свой контроллер имен. – Trip

+0

Отвечено обновлено. – zsquare

+0

Пример добавлен в github. – zsquare

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