0

複数レベルのネストされたリソースの新しいページと編集ページは、フラットなリソース構造を持っていたときにすべて正常に機能しました。より論理的な構造を作成する目的でリソースをネストして以来、これらのページは少し壊れています。次のように始まるモデルごとに 1 つのフォーム テンプレートがあります。

<%= simple_form_for @contact, html: {:class => "well form-vertical"} do |f| %>

これは、ネストされていないリソース (上記の Contact など) に対して完全に機能し、作成および更新アクションが期待どおりに機能することを可能にします。

ただし、ネストされたリソース (以下のサービスなど) では、新しいアクションが機能しなくなります。「新しい」ページを参照すると、次のエラーが表示されます。

Error 500: undefined method `services_path' for #<#<Class:0x0b3512b4>:0xb42b2c58>

関連セクションのroutes.rbは次のとおりです。

resources :contacts,   shallow: true,     :except => [ :destroy ] do
  resources :accounts, shallow: true,     :except => [ :destroy ] do
    resources :services,                  :except => [ :destroy ]
  end
end

連絡先とサービスの新規および編集のコントローラー アクションは次のとおりです。

コンタクト:

def new
  @contact = Contact.new
...
def edit
  @contact = Contact.find(params[:id])

サービス:

def new
  @service = Service.new(account_id: params[:account_id])
...
def edit
  @service = Service.find(params[:id])

関連する出力rake routesは次のとおりです。

   account_services        GET    /accounts/:account_id/services(.:format)         services#index
                           POST   /accounts/:account_id/services(.:format)         services#create
new_account_service        GET    /accounts/:account_id/services/new(.:format)     services#new
       edit_service        GET    /services/:id/edit(.:format)                     services#edit
            service        GET    /services/:id(.:format)                          services#show
                           PUT    /services/:id(.:format)                          services#update
           contacts        GET    /contacts(.:format)                              contacts#index
                           POST   /contacts(.:format)                              contacts#create
        new_contact        GET    /contacts/new(.:format)                          contacts#new
       edit_contact        GET    /contacts/:id/edit(.:format)                     contacts#edit
            contact        GET    /contacts/:id(.:format)                          contacts#show
                           PUT    /contacts/:id(.:format)                          contacts#update
4

2 に答える 2

0

結局のところ、これはこの問題に取り組むための完全に間違ったアプローチでした。代わりに、作成ルートをPOSTに直接書き直してから/:controllersimple_form_for @contact, html: {class: "well form-vertical"} do |f|

于 2012-09-11T07:36:47.207 に答える
0

<%= simple_form_for(@contact, :html => {:class => "well form-vertical"}) do |f| %>の代わりに使用

<%= simple_form_for @contact, html: {:class => "well form-vertical"} do |f| %>
于 2012-09-09T10:34:13.120 に答える