2017-11-02 5 views
0

콘솔에서 임의의 레코드를 반환하는 작업 방법을 작성했습니다. Jbuilder를 통해 임의의 레코드를 반환하는 Rails API에 GET 요청을하는 방법

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

나는 레일 API는 그 기록을 반환하려면이 메서드를 사용하는 방법을 알아내는 데 문제가 있어요

.

관련 컨트롤러에서 show() 함수의 조건을 에 추가 할 수 있습니까? 아마 당신은 말할 수 ...

def show 
 
    if Model.find(params[:id]) 
 
    @item = Model.find(params[:id]) 
 
    else 
 
    @item = Model.random 
 
    end 
 
end

, 나는 조금 잃었어요. 나를 올바른 방향으로 가리켜 주셔서 감사합니다.

답변

1

모델에서 그렇게 할 수 있습니다. 또는, 당신은 당신의 컨트롤러에서 시도 할 수 있습니다 : 레코드가 발견되지 않는 경우

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

Model.find(params[:id])에서 오류가 발생하고 당신은 당신의 else 문에 도달하지 못할 것이다.

Model.find_by(id: params[:id])은 레코드가 없으면 nil을 반환하며,이 경우 or 절은 임의의 레코드를 반환합니다.

그런 다음 render json:을 사용하여 JSON 형식으로 레코드를 반환합니다. config/routes.rb에서

Rails.application.routes.draw do 
    namespace :api, defaults: {format: 'json'} do 
    ... 
    end 
end 

:

나는 이것이 당신이 뭔가를 했어 가정 가정합니다.

+0

도움을 주셔서 감사합니다. 'model.limit (1) .order ("RANDOM()"). 모델의 첫 번째''@item = Model.find_by (id : params [: id]) || Model.random'을 컨트롤러의 show 메소드에 추가하면 작동합니다. –

+0

Super. 당신이 적합하다고 생각하는대로 자유롭게 upvote/accept하십시오. – jvillian

관련 문제