Я бы настроил это так:
resources :users, only: [] do
resources :orders, module: :users, only: :index
end
Это маршруты /users/:user_id/orders
к Users::OrdersController#index
.
Использование опции module
- изящный трюк, позволяющий устранить неоднозначностьмежду вложенными и не вложенными ресурсами.Это означает, что это не повлияет на ваш индекс существующих заказов.
Создание самого контроллера очень просто:
# app/controllers/users/orders_controller.rb
module Users
class OrdersController
# GET /users/:user_id/orders
def index
@user = User.includes(:orders).find(params[:user_id])
@orders = @user.orders
end
end
end
И просто создайте представление:
# app/views/users/orders/index.html.erb
<table>
<thead>
<tr>
<th>id</th>
<th>created_at</th>
</tr>
</thead>
<tbody>
<% @orders.each do |order|%>
<tr>
<td><%= order.id %></td>
<td><%= order.created_at %></td>
</tr>
<% end %>
</tbody>
</table>
Помните, что партиалы - ваш друг, если вы хотите поделиться кодом вида с «нормальным» индексом.