Как получить локальные данные JSON из Rails, например, bookings.json - PullRequest
0 голосов
/ 21 апреля 2019

Привет всем, очень нубский вопрос.

Я пытаюсь сохранить данные в реагирующем календаре, но необходимо сохранить их с помощью JSON.

Я заметил, что когда вы строите эшафот, rails автоматически также дает вам версию JSON.

В моем случае - http://localhost:3000/users/1/bookings.json

Что возвращает [{"first_name":"Fake Name","booking_time":"2019-04-22T02:03:00.000Z","pick_up_time":"2019-04-22T02:03:00.000Z"}] в формате JSON.

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

Есть ли способ для меня извлечь из bookings.json и сохранить его в переменной, а также сделать его приватным, где мне не нужно было бы публиковать его?

class HomeController < ApplicationController
  def dashboard
  @lookup_booking = ???("/users/1/bookings.json")???
  end
end

Панель инструментов React

<%= react_component("Booking", { booking: @lookup_booking})%>

1 Ответ

0 голосов
/ 22 апреля 2019

Вы можете сделать локальный запрос к конечной точке JSON Bookings так же, как и любой внешний запрос - использовать что-то вроде HTTParty или Фарадей может работать:

@lookup_booking = HTTParty.get(user_bookings_url(1))

Но это не будет аутентифицировано, поэтому потребуется такая же аутентификация, как и любой другой запрос.

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

Вы можете разбить код BookingsController на ActiveSupport :: Concern или модуль, или Сервисный объект (или, проще, метод на User класс), и это позволит вам аккуратно обмениваться кодом между BookingsController и HomeController. Это может выглядеть примерно так:

# app/services/lookup_user_bookings.rb
class LookupUserBookings 
  def self.bookings_as_json(user_id)
    # complicated logic to find user bookings goes here...
    bookings.as_json
  end
end

# bookings_controller.rb
class BookingsController
  def index
    @bookings = LookupUserBookings.bookings_as_json(current_user)
    render json: @bookings
  end
end

# home_controller
class HomeController
  def dashboard
    @bookings = LookupUserBookings.bookings_as_json(current_user)
  end
end

# dashboard.html.erb

<%= react_component("Booking", { booking: @bookings.to_json })%>

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