Я запускаю приложение rails, которое вызывает Simplecasts API для отображения моих эпизодов подкаста Я следовал руководству по настройке сервисов API с помощью Фарадея. Мой вопрос: как отобразить только опубликованные эпизоды на моей странице индекса? Обычно я добавляю .where(:status => "live")
в моем контроллере, IE @podcasts = Episodes.where(:status => "published")
, но это, похоже, не работает.
API Simplecast для подкаста возвращает collection
, который содержит все доступные эпизоды, каждый из которых имеет узел status
.
Любая помощь будет принята, поскольку я новичок в работе с внешние API в Rails
Пример ответа API
"collection": [
{
"updated_at": "2020-03-25T17:57:00.000000-04:00",
"type": "full",
"token": "lgjOmFwr",
"title": "Test",
"status": "draft",
Episode.rb
module Simplecast
class Episodes < Base
attr_accessor :count,
:slug,
:title,
:status
MAX_LIMIT = 10
def self.episodes(query = {})
response = Request.where('/podcasts/3fec0e0e-faaa-461f-850d-14d0b3787980/episodes', query.merge({ number: MAX_LIMIT }))
episodes = response.fetch('collection', []).map { |episode| Episode.new(episode) }
[ episodes, response[:errors] ]
end
def self.find(id)
response = Request.get("episodes/#{id}")
Episode.new(response)
end
def initialize(args = {})
super(args)
self.collection = parse_collection(args)
end
def parse_collection(args = {})
args.fetch("collection", []).map { |episode| Episode.new(episode) }
end
end
end
Контроллер
class PodcastsController < ApplicationController
layout "default"
def index
@podcasts, @errors = Simplecast::Episodes.episodes(query)
@podcast, @errors = Simplecast::Podcast.podcast(query)
render 'index'
end
# GET /posts/1
# GET /posts/1.json
def show
@podcast = Simplecast::Episodes.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
private
def query
params.permit(:query, {}).to_h
end
end