Как просмотреть все заказы пользователя в Rails? - PullRequest
0 голосов
/ 17 ноября 2018

Я сделал простое приложение на Rails, где пользователи могут добавлять сделанные заказы в модель Order.Я использовал Devise, и мне удалось выяснить, как разрешить пользователю только удалять и редактировать свои заказы.Теперь я хотел бы, чтобы пользователь мог просматривать все созданные им заказы.У пользователя много заказов, и заказы принадлежат пользователям.

Я бы хотел иметь возможность перейти на localhost:3000/users/1/orders и просмотреть все его заказы.

Вот мой текущий контроллер заказов:

class OrdersController < ApplicationController
    before_action :find_order, only: [:edit, :destroy, :update, :show]

    def index
        @orders = Order.all.order("created_at DESC")
    end

    def new
        @order = current_user.orders.build
    end

    def update
        if @order.update(order_params)
            redirect_to root_path
        else
            render 'edit'
        end
    end

    def show
    end

    def create
        @order = current_user.orders.build(order_params)

        if @order.save
            redirect_to root_path
        else
            render 'new'
        end
    end

    def edit
    end

    def destroy
        @order.destroy
        redirect_to root_path
    end

    private

        def order_params
            params.require(:order).permit(:start_point, :restaurant_location, :customer_location, :fee)
        end

        def find_order
            @order = Order.find(params[:id])
        end

end

Заранее спасибо!

1 Ответ

0 голосов
/ 17 ноября 2018

Я бы настроил это так:

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>

Помните, что партиалы - ваш друг, если вы хотите поделиться кодом вида с «нормальным» индексом.

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