我正在控制器文件中编写#create方法,该方法随后将更新多个不同的表。
一旦我使用“预定表”中的reservation#create
创建了一个预定,它应该更新其他三个表:1)菜单表中的quantity_available
和quantity_ordered
2)Account_Summaries表上的meal_credits_left
3)[用餐表上的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]
您需要设置如下指定的路线
namespace :api, defaults: { format: :json }, constraints: { subdomain: 'api' }, path: '/' do
resources :reservations, only: [:create]
end
并使用METHOD调用此方法:POST
http://api.localhost.com/v1/reservations/create