У меня есть ресурс, который отлично отображает JSON на localhost:3000/gins.json из @gins = Gin.order(name: :desc).
Что вернет ВСЕ gins. Однако я хотел бы получить ответ JSON, который возвращает только последние 4 джина, для использования в другом месте. В контроллере у меня тоже есть:
@latestgins = Gin.order("created_at DESC").first(4)
Вышеупомянутое будет работать в представлении index.html.erb с <%= @latestgins.name %>, но как мне получить для этого JSON? Я пробовал render json: @latestgins, но переход к localhost:3000/latestings.json, конечно, дает ошибку маршрутизации.
Я подозреваю, что атакую это совершенно неправильно, но только начинаю с Rails API.





вы можете добавить ответ на формат json в свой метод индекса:
def index
@gins = Gin.order(name: :desc)
@latestgins = Gin.order("created_at DESC").first(4)
respond_to do |format|
format.html
format.json { render json: @latestgins }
end
end
ваш @latestgins теперь доступен здесь: localhost:3000/gins.json
Если вы хотите, чтобы пользовательский маршрут отображал ваши данные, просто добавьте его в свои маршруты:
defaults format: :json do
get 'last4gins', to: "gins#index"
end
Ваши данные для последних 4 записей доступны на http://localhost:3000/last4gins.json, на http://localhost:3000/last4gins, а также на localhost:3000/gins.json.
Если вы хотите, чтобы маршрут индекса gins был чистым, вы также можете создать собственный метод и удалить @latestgins из своего индекса:
# routes
get 'last4gins', to: "gins#last4gins"
#controller
def index
@gins = Gin.order(name: :desc)
end
def last4gins
@latestgins = Gin.order("created_at DESC").first(4)
render json: @latestgins
end
Теперь данные больше не доступны на /gins.json
Спасибо, сработало. Я пошел по пути добавления собственного метода. Теперь я изучил эту технику, она открывает для меня много другого. Спасибо,
Спасибо @sovalina. Я уже могу получить доступ к
localhost:3000/gins.json(только что обновил сообщение, чтобы прояснить это). Как мне получить доступ к чему-то вродеlocalhost:3000/last4gins.json?