Не go чокнутый в состоянии покоя:
Правило большого пальца: ресурсы никогда не должны быть вложены глубже, чем на 1 уровень. Может потребоваться, чтобы коллекция находилась в области видимости ее родителя, но к конкретному члену всегда можно получить доступ непосредственно по идентификатору, и для этого не требуется область видимости (если идентификатор не является уникальным по какой-то причине)
- Jamis Бак
Создание из ваших маршрутов пирамиды делает вещи намного сложнее, чем они должны быть на самом деле. Чтобы удалить вложения payment_milestones из проектов, вам нужно изменить маршруты на:
resources :projects do
resources :financials
end
resources :financials, only: []
resources :payment_milestones, shallow: true
end
Это создаст следующие маршруты:
financial_payment_milestones GET /financials/:financial_id/payment_milestones(.:format) payment_milestones#index
POST /financials/:financial_id/payment_milestones(.:format) payment_milestones#create
new_financial_payment_milestone GET /financials/:financial_id/payment_milestones/new(.:format) payment_milestones#new
edit_payment_milestone GET /payment_milestones/:id/edit(.:format) payment_milestones#edit
payment_milestone GET /payment_milestones/:id(.:format) payment_milestones#show
PATCH /payment_milestones/:id(.:format) payment_milestones#update
PUT /payment_milestones/:id(.:format) payment_milestones#update
DELETE /payment_milestones/:id(.:format) payment_milestones#destroy
И затем вы можете изменить свое представление на:
<% @financials.each do |financial| %>
<tr>
<td><%= financial.responsibility %></td>
<td><%= link_to "New milestone", new_financial_payment_milestone_path(financial) %></td>
</tr>
<% end %>
Вы хотите использовать локальную переменную financial
, которая передается в блок, а не переменную экземпляра @financial
. Вы также должны всегда предоставлять текст ссылки для доступности.