Rails 5路由到错误的操作

时间:2017-01-10 22:50:11

标签: ruby-on-rails ruby routing

我确实尝试了几个建议,但我找不到解决这个问题的方法。我的应用程序工作正常,但当我尝试link_to自定义操作时,它总是尝试路由到显示'操作和结果是参数不匹配('显示'操作等待:id参数,该参数被分配了操作的名称" id" =>& #34; reporte_asist")所以我收到错误:

Started GET "/equipos/reporte_asist.xls?entrenador=1&final=2017-01-30+00%3A00%3A00+-0600&inicio=2017-01-01+00%3A00%3A00+-0600" for ::1 at 2017-01-10 15:53:09 -0600
**Processing by EquiposController#show as XLS**
  Parameters: {"entrenador"=>"1", "final"=>"2017-01-30 00:00:00 -0600", "inicio"=>"2017-01-01 00:00:00 -0600", "id"=>"reporte_asist"}
  Equipo Load (0.2ms)  SELECT  "equipos".* FROM "equipos" WHERE "equipos"."id" = ? LIMIT ?  [["id", 0], ["LIMIT", 1]]
Completed 404 Not Found in 2ms (ActiveRecord: 0.2ms)

ActiveRecord::RecordNotFound (Couldn't find Equipo with 'id'=reporte_asist):

我尝试删除Turbolinks,但问题仍然存在,这是我用来链接到' xls'格式响应:

<div data-no-turbolinks>
<%= link_to "Excel", reporte_asist_url(format: "xls", entrenador: @entrenador.id, inicio: @inicio, final: @final, controller: "equipos", action: "reporte_asist")  %>
</div>

这是我的config / routes.rb的一部分:

resources :categorias
get '/equipos/forma_rep'
post '/equipos/reporte_asist', to: 'equipos#reporte_asist', as: 'reporte_asist'
resources :players
get '/eventos/calendario' => 'eventos#calendario', as: 'calendario'
resources :eventos
get '/equipos/:id/eventos_feed' => 'equipos#eventos_feed', as: 'eventosFeed'
get '/eventos/:id/players_feed' => 'eventos#evento_players', as: 'eventoPlayers'
post '/asistencias', to: 'asistencias#create'
get '/validar/:equipo_id', to: 'players#validar'
resources :equipos

这是rails路由输出:

  equipos_forma_rep GET    /equipos/forma_rep(.:format)            equipos#forma_rep
      reporte_asist POST   /equipos/reporte_asist(.:format)        equipos#reporte_asist
            players GET    /players(.:format)                      players#index
                    POST   /players(.:format)                      players#create
         new_player GET    /players/new(.:format)                  players#new
        edit_player GET    /players/:id/edit(.:format)             players#edit
             player GET    /players/:id(.:format)                  players#show
                    PATCH  /players/:id(.:format)                  players#update
                    PUT    /players/:id(.:format)                  players#update
                    DELETE /players/:id(.:format)                  players#destroy
         calendario GET    /eventos/calendario(.:format)           eventos#calendario
            eventos GET    /eventos(.:format)                      eventos#index
                    POST   /eventos(.:format)                      eventos#create
         new_evento GET    /eventos/new(.:format)                  eventos#new
        edit_evento GET    /eventos/:id/edit(.:format)             eventos#edit
             evento GET    /eventos/:id(.:format)                  eventos#show
                    PATCH  /eventos/:id(.:format)                  eventos#update
                    PUT    /eventos/:id(.:format)                  eventos#update
                    DELETE /eventos/:id(.:format)                  eventos#destroy
        eventosFeed GET    /equipos/:id/eventos_feed(.:format)     equipos#eventos_feed
      eventoPlayers GET    /eventos/:id/players_feed(.:format)     eventos#evento_players
        asistencias POST   /asistencias(.:format)                  asistencias#create
                    GET    /validar/:equipo_id(.:format)           players#validar
            equipos GET    /equipos(.:format)                      equipos#index
                    POST   /equipos(.:format)                      equipos#create
         new_equipo GET    /equipos/new(.:format)                  equipos#new
        edit_equipo GET    /equipos/:id/edit(.:format)             equipos#edit
             equipo GET    /equipos/:id(.:format)                  equipos#show
                    PATCH  /equipos/:id(.:format)                  equipos#update
                    PUT    /equipos/:id(.:format)                  equipos#update
                    DELETE /equipos/:id(.:format)                  equipos#destroy

请帮帮我。

1 个答案:

答案 0 :(得分:1)

默认情况下,

HTML <a>链接会产生GET请求。 Rails提供了一种通过在链接上设置属性来创建POST请求的方法。

您的路由生成的网址助手(例如reporte_asist)仅生成正确的路径/网址。它们不会将任何其他参数传递给link_to。如果您要向指定的路径发送POST请求,则需要向传递给method: :post的选项添加link_to

link_to "Excel", reporte_asist_url(...), method: :post

也就是说,POST听起来像是用于此操作的正确HTTP动词。这听起来应该是GET请求。

注意:我为了简洁/清晰而截断了传递给reporte_asist_url的参数;你还需要它们。