【问题标题】:Rails controller method that updates multiple tables values更新多个表值的 Rails 控制器方法
【发布时间】:2019-11-26 05:45:49
【问题描述】:

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

一旦我在预订表中使用reservation#create 创建预订,它应该会更新其他三个表:
1) quantity_availablequantity_ordered 在菜单表中
2) meal_credits_left Account_Summaries 表
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]

【问题讨论】:

  • 观察:在进行这样的非原子更新时,请考虑使用数据库支持的事务。
  • 我不明白为什么当您的操作已经按照您所说的进行时,您为什么要询问路由配置。 (顺便说一句,我会用meal.increment!(:total_number_ordered)user_summary.decrement(:meal_credits_left) 把它弄干一点)

标签: ruby-on-rails controller crud nested-routes


【解决方案1】:

你需要设置一个如下指定的路由,这里的 API 版本是 v1

https://paweljw.github.io/2017/07/rails-5.1-api-app-part-3-api-versioning/

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

并使用 METHOD 调用此方法:POST

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

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

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多