я пытаюсь сделать API, используя Ruby on Rails 5, я новичок в этом, поэтому я использовал скаффолд для создания таблиц, так что это моя основная таблица для поездки
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
я добавляю его в path model/trip.rb но, к сожалению, выдает ошибку и теперь работает, вы можете проверить это по моей ссылке на github
@MohammedHassan Вы отправили свои изменения на GitHub? Я не вижу недавний коммит.
извините, но я не пытался правильно описать свой путь, извините :), эта ошибка ArgumentError (необходимо предоставить хотя бы одну проверку): app/models/trip.rb:4:in <class:Trip>' app/models/trip.rb:1:in <main >'
также вы можете проверить мой git прямо сейчас
Возможно, это опечатка, которую я сделал выше, попробуйте изменить строку 3 с validates на validate
посмотрите на эту ошибку, когда я ее изменю :), ArgumentError (Неизвестный ключ: :presence. Действительные ключи: :on, :if, :unless, :prepend. Возможно, вы хотели вызвать validates вместо validate?): app/models /trip.rb:5:in <class:Trip>' app/models/trip.rb:1:in <main>'
Хорошо, я только что вытащил твой код и запустил его. Код выше должен работать. Скопируйте и вставьте все это, я внес немало изменений.
Большое спасибо, и если у вас есть хороший учебник, который поможет мне, пожалуйста, укажите его, и еще раз спасибо
На конкретную тему? Если вы не хотите просто изучать рельсы в целом, я бы указал вам на Проект Одина. Или Руководство по рельсам
Вы также можете сделать ограничение на стороне базы данных, вот жемчужина, чтобы помочь
большое спасибо, если вы не возражаете, у меня есть еще один вопрос в моем проекте, если я хочу закрыть идентификатор для поездки, чтобы я не мог использовать его снова после завершения в таблице местоположений
вкратце, когда статус поездки «завершен», я не могу добавить другое место с тем же идентификатором для завершенной поездки
Я не совсем понимаю ваш вопрос. Идентификатор — это то, что поддерживается фреймворком. Возможно, вам следует создать новый вопрос, чтобы вы могли лучше объяснить его.
Не уверен, что вы спрашиваете. Вы спрашиваете, как обновить фактическое значение, что должен делать ваш текущий код. Я хотел бы убедиться, что статус не может быть изменен ненадлежащим образом?