ruby-on-rails - 制作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
解决方案
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
推荐阅读
- javascript - 尝试为学习伙伴类型的网站制作进度计数器
- protractor - 量角器:多次循环简单测试 - 无参数
- php - PHP 需要“guzzle.phar”会引发致命错误,但在页面刷新时有效
- javascript - 未通过 php 调用 shell 脚本和在 php 中运行 shell 脚本的完成状态
- python - Python loadarff 对字符串属性失败
- c++ - STM32 Switch Case影响操作
- javascript - 将 div img 更改为另一个中的活动图像
- android - 使用 Retrofit 将文件数组上传到服务器
- azure-devops - 在运行时添加其他映射以获取源(Azure DevOps 管道 - TFVC)
- oracle - 在 Oracle 中使用触发器将列值设置为等于另一列