Rails控制器方法,用于更新多个表值

问题描述 投票:0回答:1

我正在控制器文件中编写#create方法,该方法随后将更新多个不同的表。

一旦我使用“预定表”中的reservation#create创建了一个预定,它应该更新其他三个表:1)菜单表中的quantity_availablequantity_ordered2)Account_Summaries表上的meal_credits_left3)[用餐表上的total_number_ordered

我的Api::ReservationsController看起来像这样:

 def create
    @user = current_user
    user_summary = @user.account_summary

    @reservation = Reservation.new(
      user_id: params[:reservation][:user_id],
      menu_id: params[:reservation][:menu_id],
    )

    if @reservation.save
      menu = @reservation.menu
      meal = @reservation.meal

      user_summary.update_attributes(
        meal_credits_left: user_summary.meal_credits_left - 1
      )

      menu.update_attributes(
        quantity_available: menu.quantity_available -1,
        quantity_ordered: menu.quantity_ordered + 1
      )

      meal.update_attributes(
        total_number_ordered: meal.total_number_ordered + 1
      )

      render :show
    else
      render json: @reservation.errors.full_messages, status: 422
    end
  end

如何设置路由以确保可以更新ReservationsController#create中的那些属性?

我的路线如下:

    resources :account_summaries, only: [:create, :update]
    resources :reservations, only: [:index, :create, :update, :destroy]
    resources :menus, only: [:index, :update]
    resources :meals, only: [:index, :update]
ruby-on-rails controller crud nested-routes
1个回答
0
投票

您需要设置如下指定的路线

  namespace :api, defaults: { format: :json }, constraints: { subdomain: 'api' }, path: '/' do
        resources :reservations, only: [:create]
  end

并使用METHOD调用此方法:POST

http://api.localhost.com/v1/reservations/create

https://coderwall.com/p/t68tpa/setting-routes-for-rails-api

© www.soinside.com 2019 - 2024. All rights reserved.