Виноград, как установить значения параметров динамически - PullRequest
2 голосов
/ 16 мая 2019

Мы давно используем виноград.

Ниже показано, как мы устанавливаем значения для параметра.

params do
  optional :my_column1, type: Integer, desc: 'some description', values: MyModel1.all.pluck(:id)
  optional :my_column2, type: Integer, desc: 'some description', values: MyModel2.all.pluck(:id)
end

Наша база данных разделена между двумя службами. Два вышеупомянутых столбца (my_column1 и my_column2) обновляются другим микросервисом. И когда кто-то делает запрос с использованием API, он завершается с сообщением об ошибке «my_column1 не имеет допустимого значения». То же самое касается my_column2.

Во время отладки я понял, что во время загрузки приложения rails эти значения устанавливаются и обновляются только при следующей перезагрузке сервера.

Мы хотим, чтобы эти значения обновлялись динамически. Это означает, что каждый раз, когда мы делаем запрос, он должен сделать запрос к базе данных и установить эти значения. Мне очень трудно понять, как это сделать, или даже если это возможно с Grape.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 16 мая 2019

Вам просто нужно переместить значения в процедуру, чтобы они оценивались при каждом запросе:

params do
  optional :my_column1, type: Integer, values: -> { MyModel1.all.pluck(:id) }
end

Это более подробно описано в главном README здесь: https://github.com/ruby-grape/grape#values

...