【问题标题】:How do I retrieve a random GET request in Ruby on Rails 5?如何在 Ruby on Rails 5 中检索随机 GET 请求?
【发布时间】:2019-11-19 23:59:10
【问题描述】:

我已经基于 Office 的 Michael Scott 创建了我的 REST API,到目前为止,如果您进入 API 的主要部分,它会显示所有引号 /api/v1/quotes/,如果您可以单独获取添加一个 id 号,例如 /api/v1/quotes/5,但我希望用户在输入 GET 请求时能够获得随机报价。

这最好使用 URL 的额外部分来完成,例如 /api/v1/quotes/random。

我在网上看了很多,但我无法弄清楚。我是将代码放入引号控制器并创建另一个函数还是必须将其放在其他地方,例如 routes.db?我还要放入 RANDOM 的 SQL 函数,还是有更好、更有效的方法来随机化它。我的数据库只有 50 条记录,并且是在 mysql2 中完成的。

提前致谢。

这是我第一次在这里发帖,因为通常我讨厌寻求帮助,因为我认为我总能自己解决,但我对 Ruby 非常陌生,所以我对如何解决这个问题一无所知。如果您需要我澄清我的问题,请告诉我。

【问题讨论】:

    标签: sql ruby rest ruby-on-rails-3 mysql2


    【解决方案1】:

    您可以在模型和控制器中执行此操作。

    型号:

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

    控制器:在方法显示中

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

    希望对你有所帮助。

    【讨论】:

      【解决方案2】:

      我会配置一个quotes/random collection route:

      # 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
      

      请注意:从表中返回单个随机行是 database specific - 对于 MySQL

      ORDER BY RAND() LIMIT 1
      

      似乎是要走的路。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多