Использование стандартного scaffold form_for с остальными ресурсами с custom: controller - PullRequest
0 голосов
/ 30 марта 2011

В моем приложении есть контроллер «ролей учетных записей» (для моей модели AccountRole), использующий представления, сгенерированные стандартным генератором скаффолдов. Этот контроллер вложен в мой контроллер «учетных записей» (для моей модели «Учетная запись»), используя следующую конфигурацию маршрутизации:

resources :accounts do
  resources :people, :controller => :account_roles
end

Это приводит к таким помощникам маршрутизации, как account_people_path (/accounts/1/people) и account_person_path (/accounts/1/person/1). Все хорошо.

Моя проблема возникает при частичной генерации _form.html.erb по умолчанию. Этот файл выглядит так:

<%= form_for([@account,@account_role]) do |f| %>
  <!-- Rest of form -->
<% end %>

Я настроил это представление для работы с вложенными ресурсами, но использование опции :controller в моей маршрутизации вызывает у меня проблемы, я думаю.

Моя спецификация представления для представлений «новый» и «редактировать» (оба из которых используют эту часть) приводит к следующей ошибке:

ActionView::Template::Error:
   undefined method `account_account_role_path' for #<#<Class:0x105334360>:0x105300c18>

Я думаю , что здесь происходит, так это то, что form_for пытается «угадать» помощника маршрута для этих ресурсов. Я знаю, что мог бы переопределить URL-адрес, используя опцию :url для form_for, но это похоже на отрыв.

Мне не хватает очевидного решения, позволяющего мне объединить опцию: controller routing с form_for ресурсно-ориентированным стилем?

Ответы [ 3 ]

1 голос
/ 14 сентября 2011

В случае, если кто-то вроде меня все еще ищет ответ на этот вопрос, я думаю, что я только что понял. То, что я сделал, в вашем случае будет

map.resources: account_roles,: as => "people" map.resources: people,: controller => "account_roles"

Это помогло мне.

1 голос
/ 30 марта 2011

Полагаю, вы можете указать свой маршрут примерно так

resources :people, :controller => :account_roles, :as => "account_roles"

Согласно http://guides.rubyonrails.org/routing.html#overriding-the-named-helpers

0 голосов
/ 19 августа 2011

Хотя это несколько более старый пост, я тоже с этим боролся.

Мое решение для этого заключалось в использовании опции url для указания пути.

В моемрегистр (который немного отличается, но все еще происходит из материала controller: "AccountRoles") Мне нужно было сделать следующее:

resources :clients, controller: "AccountClients"


= form_for @client, url: clients_url(@client) do |f|
  = f.error_messages
  %p
    = f.label :name
    = f.text_field :name

  %p= f.submit

Таким образом, вы передаете переменную @client в форму, но также задаете правильныйURL, используя url:.

В вашем случае я считаю, что это будет:

<%= form_for([@account,@account_role], 
      url: account_people_path([@account,@account_role])) do |f| %>
  <!-- Rest of form -->
<% end %>

Надеюсь, это поможет любому, кто сталкивается с той же проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...