首页 > 解决方案 > 制作api时更新函数单向改变参数

问题描述

我正在尝试使用 Ruby on Rails 5 制作 API,我是新手,所以我使用脚手架生成表格,所以这是我旅行的主要表格

class CreateTrips < ActiveRecord::Migration[5.2]
  def change
    create_table :trips do |t|
      t.string :nameOfDriver
      t.string :status
      t.timestamps
    end
  end
end

这是我在控制器中的更新功能

def update
  if @trip.update(trip_params)
    render json: @trip

 else
  render json: @trip.errors, status: :unprocessable_entity
 end
end

我正在尝试首先添加约束,将状态添加为“已完成”或“正在进行”...其次检查它是否“已完成”我无法将其更改为“正在进行”

完整项目的此链接 https://github.com/gnik2036/RubyTask

标签: ruby-on-railsjsonrubysqlite

解决方案


class Trip < ApplicationRecord
  TRIP_STATUSES = %w[completed ongoin].freeze
  INVALID_STATUS_CHANGES = [%w[completed ongoin]].freeze
  validate :status_validity, on: :update
  validates :status, presence: true, inclusion: { in: TRIP_STATUSES }

  private

  def status_validity
    return unless status_changed?

    if INVALID_STATUS_CHANGES.include? status_change
      errors.add(:status, "Cannot be changed from #{status_was} to #{status}.")
    end
  end
end

推荐阅读