Мне нужно показать данные с этого сайта: https://baconipsum.com/json-api/ , но я не знаю, где написать код этого в моем приложении. Какой код мне нужно написать для контроллеров и представлений?
Настройка Фарадея:
bacon = Faraday.new("https://baconipsum.com/") do |f|
f.response :json # automatically parse responses as json
end
Отправить запрос в контроллере:
@bacon = bacon.get("api/", type: 'all-meat', sentences: 1).body # => ["Leberkas frankfurter chicken tongue."]
Используйте его в представлении:
<% @bacon.each do |meat| %>
<p>
<%= meat %>
</p>
<% end %>
https://lostisland.github.io/faraday/usage/
Обновлять
Есть много способов настроить его. Очень простая установка может выглядеть так:
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
private
# NOTE: this method will be accessible in any controller
# that inherits from ApplicationController
def baconipsum
# NOTE: memoize for a bit of performance, in case you're
# making multiple calls to this method.
@baconipsum ||= Faraday.new("https://baconipsum.com/") do |f|
f.response :json
end
end
end
# app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
def show
@article = Article.find(params[:id])
# I'm not quite sure what you're trying to do with it;
# change this to fit your use case.
@bacon = baconipsum.get("api/", type: 'all-meat').body
end
end
# app/views/articles/show.html.erb
<% @bacon.each do |meat| %>
<p> <%= meat %> </p>
<% end %>
где я должен написать код для настройки Фарадея и где написать код для запроса контроллера
@DebannitaPal, чтобы начать красиво и просто, просто соберите все это вместе в действии контроллера. вы можете обновить свой вопрос, добавив еще несколько деталей и, возможно, некоторый код, который у вас есть, чтобы я мог понять, где вы застряли.
Пожалуйста, помогите мне. Я добавил все коды на github
смотрите обновление. Надеюсь, поможет.
ошибка сегментации, похоже, не связана с этим. в ruby это часто временная ошибка. попробуйте перезапустить сервер rails. если это сохраняется, похоже, это должен быть совсем другой вопрос.
Первоначально, когда я открываю локальный хост, он работает, но когда я нажимаю, чтобы показать статью, сервер перестал работать
где я должен написать это: требуется 'фарадей' требуется 'фарадей/net_http' Faraday.default_adapter = :net_http
попробуйте изменить свою рубиновую версию на 2.7.6
, это должно исправить segfault. вам не нужно require
ничего. :net_http
уже используется по умолчанию.
Эй, спасибо, это работает для меня. Не могли бы вы понять эти коды Application Controller и @bacon = baconipsum.get("api/", type: 'all-meat').body эту строку
Где размещать вызовы HTTP в вашем приложении Rails, зависит от вашего мнения. Но мое мнение, что не стоит впихивать его ни в модель, ни в представление, ни в контроллер. У всех уже есть обязанности. Вместо этого создайте отдельный клиентский объект, который отвечает за касание границ приложения и нормализацию отклика на модели, с которыми имеет дело ваше приложение. Это дает вам класс, который можно тестировать изолированно, и изолирует ваше приложение, чтобы изменения в соавторе (API) не нарушали огромные куски вашего приложения.