Как получить случайный запрос GET в Ruby on Rails 5? - PullRequest
1 голос
/ 10 июля 2019

Я создал свой REST API на основе Майкла Скотта из Office, поэтому, если вы перейдете к основной части API, он отобразит все цитаты / api / v1 / quotes /, и вы можете получить отдельные, если вы добавьте идентификационный номер, такой как / api / v1 / quotes / 5, но я хочу, чтобы пользователи могли получать случайную цитату, когда они помещают запрос GET.

Желательно, чтобы это делалось с дополнительной частью URL, такой как /api/v1/quotes/random.

Я много смотрел в Интернете, но не могу понять это. Я помещаю свой код в контроллер кавычек и создаю другую функцию, или я должен поместить это где-нибудь еще, например rout.db? Также я добавляю функцию SQL RANDOM или есть лучший и более эффективный способ ее рандомизации. В моей базе данных всего 50 записей, и это сделано в mysql2.

Заранее спасибо.

Я впервые пишу здесь, как обычно, я ненавижу просить о помощи, потому что я думаю, что всегда могу сам это понять, но я очень плохо знаком с Руби, поэтому совершенно не знаю, как решить эту проблему. Если я хочу уточнить мой вопрос, просто дайте мне знать.

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Вы можете сделать это как в модели, так и в контроллере.

Модель:

class Model < ApplicationRecord
  def self.random
   Model.limit(1).order("RANDOM()").first
  end
end

Контроллер: в методе show

def show
   render json: Model.find_by(id: params[:id]) || Model.random
end

Надеюсь, это поможет.

1 голос
/ 10 июля 2019

Я бы настроил quotes/random маршрут сбора :

# in config/routes.rb
resources :quote do
  get 'random', on: :collection
end

и использовал бы метод контроллера следующим образом:

# in controllers/quotes_controller.rb
def random
  @quote = Quote.order('RAND()').first
  render :show
end

Обратите внимание: возвратодна случайная строка из таблицы специфична для базы данных - для MySQL

ORDER BY RAND() LIMIT 1

, кажется, путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...