複数レベルのネストされたリソースの新しいページと編集ページは、フラットなリソース構造を持っていたときにすべて正常に機能しました。より論理的な構造を作成する目的でリソースをネストして以来、これらのページは少し壊れています。次のように始まるモデルごとに 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