#ruby-on-rails
#ruby-on-rails
Вопрос:
У меня есть приложение rails, как спереди, так и сзади. На передней панели есть несколько компонентов React, которые извлекают данные. В этом случае он получает комментарии в блоге. Но в приложении вы также можете перейти к /blogs/3/comments
, что не то, что я хочу. Я не хочу, чтобы люди получали доступ /blogs/3/comments
, но я хочу, чтобы конечная точка существовала.
routes.rb
resources :blogs do
resources :comments, only: [:show, :index]
end
В comment_controller.rb
у меня есть
def index
blog = Blog.find(params[:blog_id])
@comments = blog.comments.select("comments.*, users.name").joins(:user)
render json: { comments: @comments }
end
Когда я выполняю запрос get с помощью fetch или axios для получения комментариев в блоге, он успешно возвращает мне json, но на веб-сайте пользователь также может перейти /blogs/3/comments
, и он покажет json.
{"comments":[{"id":3,"content":"lorem ...","created_at":"2020-09-11T01:55:56.281Z","updated_at":"2020-09-11T01:55:56.281Z","blog_id":3,"user_id":1,"name":"user1"},{"id":2,"content":"lorem ...s","created_at":"2020-09-11T01:55:56.262Z","updated_at":"2020-09-11T01:55:56.262Z","blog_id":3,"user_id":1,"name":"user2"},{"id":1,"content":"lorem ...","created_at":"2020-09-11T01:55:56.240Z","updated_at":"2020-09-11T01:55:56.240Z","blog_id":3,"user_id":1,"name":"user1"}]}
Есть ли способ не разрешить пользователю доступ /blogs/3/comments
? И пусть конечная точка работает для получения запроса от других клиентов?
Ответ №1:
Я предполагаю, что вы имеете в виду, что вы не хотите, чтобы конечная точка была доступна для текстовых / html-запросов.
def index
blog = Blog.find(params[:blog_id])
@comments = blog.comments.select("comments.*, users.name").joins(:user)
respond_to do |format|
format.json { render json: { comments: @comments } }
format.html { redirect_to '/somewhere_else', status: :not_acceptable }
end
end
Смотрите ActionController::MimeResponds.