【发布时间】:2020-06-29 21:06:19
【问题描述】:
我正在尝试调用 API(喜欢 https://jsonplaceholder.typicode.com/)。这个想法很简单,单击按钮以显示 res,但我在实现它时遇到了麻烦。我下面的只是调用该函数的按钮,并希望在控制台中打印它。
错误:
enter code here No route matches [POST] "/dashboard/fetch_action"
路线
resources :dashboard do
collection do
get :fetch_action
end
end
dashboard_controller.er
require 'faraday'
def index
end
def fetch_action
response = Faraday.get 'https://jsonplaceholder.typicode.com/posts/1'
puts response
# return response
end
index.html.erb
<%= button_to "fetch action", fetch_action_dashboard_index_path, class: "btn btn-warning" %>
谢谢
编辑:
路线:
Rails.application.routes.draw do
devise_for :users
devise_scope :user do
root to: 'devise/sessions#new'
end
get 'dashboard' => 'dashboard#index'
get '/dashboard/fetch-action', to: 'dashboard#fetch_action', as: 'dashboard_fetch_action'
get '/user' => 'dashboard#index', :as => :user_root
end
搜索路线
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
POST /users/password(.:format) devise/passwords#create
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
user_registration PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
POST /users(.:format) devise/registrations#create
root GET / devise/sessions#new
dashboard GET /dashboard(.:format) dashboard#index
dashboard_fetch_action GET /dashboard/fetch-action(.:format) dashboard#fetch_action
user_root GET /user(.:format) dashboard#index
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
index.html.eb
<%= link_to "fetch action", dashboard_fetch_action_path, class: "btn btn-info" %>
<%= @response %>
fetch-action.html.erb
<%= @response %>
dashboard_controller
def index
end
def show
end
def fetch_action
uri = URI('https://jsonplaceholder.typicode.com/posts/1')
req = Net::HTTP.get(uri)
@response = JSON.parse(req)
end
错误(当点击 link_to 重定向到仪表板/获取操作时出现以下错误):
DashboardController#show is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: [] NOTE! For XHR/Ajax or API requests, this action would normally respond with 204 No Content: an empty white screen. Since you're loading it in a web browser, we assume that you expected to actually render a template, not nothing, so we're showing an error to be extra-clear. If you expect 204 No Content, carry on. That's what you'll get from an XHR or API request. Give it a shot.
【问题讨论】:
-
为什么在控制器中使用“puts”而不是“respond_to”?
-
fetch_action方法需要返回一个json值,所以最后一行应该是render json: response
-
button_to 元素需要生成一个 GET 请求以匹配您配置的路由。所以添加方法::进入button_to参数。
标签: ruby-on-rails ruby api model-view-controller jsonplaceholder