Ruby on rails 尽管定义了[GET],但没有与之匹配的路由
我很难理解我为什么会有这个问题。我浏览了大部分类似的问题。在大多数情况下,作者忘记包括相关路线。然而,我清楚地知道,我把这个问题归因于我对Rails知识的不足,我希望你们中的一些人能够解决这个问题 我一直得到的错误是:Ruby on rails 尽管定义了[GET],但没有与之匹配的路由,ruby-on-rails,ruby,Ruby On Rails,Ruby,我很难理解我为什么会有这个问题。我浏览了大部分类似的问题。在大多数情况下,作者忘记包括相关路线。然而,我清楚地知道,我把这个问题归因于我对Rails知识的不足,我希望你们中的一些人能够解决这个问题 我一直得到的错误是:No route matches[GET]“/fight.29”,尽管在resources:fights中定义了它,但我也尝试了其他方法,但没有效果 我注意到的几件事: 我的应用程序尝试访问http://localhost:3000/fight.29而不是http://local
No route matches[GET]“/fight.29”
,尽管在resources:fights
中定义了它,但我也尝试了其他方法,但没有效果
我注意到的几件事:
- 我的应用程序尝试访问
而不是http://localhost:3000/fight.29
通过http://localhost:3000/fights/29
飞行控制器中的重定向
- 当我键入
手动操作,效果非常好http://localhost:3000/fights/29
- 我的
缺少前缀战斗的show action
- 在url内部的
和战斗
之间有一个29
。不确定这是什么意思,是否与错误有关
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#home
fighter_skills GET /fighters/:fighter_id/skills(.:format) skills#index
POST /fighters/:fighter_id/skills(.:format) skills#create
new_fighter_skill GET /fighters/:fighter_id/skills/new(.:format) skills#new
edit_fighter_skill GET /fighters/:fighter_id/skills/:id/edit(.:format) skills#edit
fighter_skill GET /fighters/:fighter_id/skills/:id(.:format) skills#show
PATCH /fighters/:fighter_id/skills/:id(.:format) skills#update
PUT /fighters/:fighter_id/skills/:id(.:format) skills#update
DELETE /fighters/:fighter_id/skills/:id(.:format) skills#destroy
fighters GET /fighters(.:format) fighters#index
POST /fighters(.:format) fighters#create
new_fighter GET /fighters/new(.:format) fighters#new
edit_fighter GET /fighters/:id/edit(.:format) fighters#edit
fighter GET /fighters/:id(.:format) fighters#show
PATCH /fighters/:id(.:format) fighters#update
PUT /fighters/:id(.:format) fighters#update
DELETE /fighters/:id(.:format) fighters#destroy
fight POST /fight(.:format) fights#start
new_fight GET /fights/new(.:format) fights#new
GET /fights/:id(.:format) fights#show
这是我的路线。rb
:
root 'static_pages#home'
resources :fighters do
resources :skills
end
post '/fight', to: 'fights#start'
resources :fights, only: [:new, :show]
#get '/fights/:id/', to: 'fights#show'
#match '/:id' => 'fights#show', via: [:get]
def show
@fight = Fight.find(params[:id])
end
def start
@fight = Fight.create(attacker_id: params[:attacker_id], defender_id: params[:defender_id], winner: params[:winner])
if @fight.save
redirect_to @fight
else
redirect_to root_path
end
end
这是控制器.rb
:
root 'static_pages#home'
resources :fighters do
resources :skills
end
post '/fight', to: 'fights#start'
resources :fights, only: [:new, :show]
#get '/fights/:id/', to: 'fights#show'
#match '/:id' => 'fights#show', via: [:get]
def show
@fight = Fight.find(params[:id])
end
def start
@fight = Fight.create(attacker_id: params[:attacker_id], defender_id: params[:defender_id], winner: params[:winner])
if @fight.save
redirect_to @fight
else
redirect_to root_path
end
end
日志(另一个请求但出现相同错误):
我错过了什么
编辑:
<%= link_to 'FIGHT!', fight_path(@fight, attacker_id: @attacker.id,
defender_id: @defender.id,
winner: compare_power_levels(@attacker, @defender)), method: :post %>
注意:比较功率级别仅在比较后返回两个对象中的一个。如果在单击链接到标签时遇到此问题,请检查链接到标签中的路径 理想情况下,它应该如下所示:
<%= link_to 'show', fight_path(@fight) %>
如果您在单击链接到标签时遇到此问题,请检查链接到标签中的路径 理想情况下,它应该如下所示:
<%= link_to 'show', fight_path(@fight) %>
rails生成带有点的链接是因为您在路径或任何其他“收集”路线中使用了多元化 您没有将您的
链接添加到
,因此我将尝试解决以下问题:
<%= link_to 'show', fight_path(@fight) %>
rails生成带有点的链接是因为您在路径或任何其他“收集”路线中使用了多元化 您没有将您的
链接添加到
,因此我将尝试解决以下问题:
<%= link_to 'show', fight_path(@fight) %>
你可以试试
redirect_to "/fights/#{@fight.id}"
或
重定向到战斗路径(@fight)
您可以试试
redirect_to "/fights/#{@fight.id}"
或
重定向到战斗路径(@fight)
原因如下:
post '/fight', to: 'fights#start'
resources :fights, only: [:new, :show]
post'/fight'
生成命名路由fight\u路径
,该路径通常由资源
创建。由于它已经定义,资源
不会覆盖它。您可以在路线中看到:
fight POST /fight(.:format) fights#start
虽然它应该是:
fight GET /fight/:id(.:format) fights#start
由于route只有一个可选参数:format
,当您调用战斗路径(@user)
时,@user.id
被用作格式,结果是'/fight.30'
您需要重命名您的post'/fight'
路线:
post '/fight', to: 'fights#start', :as 'start_fight'
原因是:
post '/fight', to: 'fights#start'
resources :fights, only: [:new, :show]
post'/fight'
生成命名路由fight\u路径
,该路径通常由资源
创建。由于它已经定义,资源
不会覆盖它。您可以在路线中看到:
fight POST /fight(.:format) fights#start
虽然它应该是:
fight GET /fight/:id(.:format) fights#start
由于route只有一个可选参数:format
,当您调用战斗路径(@user)
时,@user.id
被用作格式,结果是'/fight.30'
您需要重命名您的post'/fight'
路线:
post '/fight', to: 'fights#start', :as 'start_fight'
您建立的链接不正确,能否显示将您重定向到该错误的代码?@BroiSatse我编辑了我的帖子。您建立的链接不正确,能否显示将您重定向到该错误的代码?@BroiSatse我编辑了我的帖子。我更新了我的评论,问题出现在我发出post请求,然后尝试重定向到fights show页面之后。看一看,让我知道。在这里发布“post”请求有什么必要?理想情况下,它应该是GET request,并且您也在routes.rb中定义了一个routes。rb为:GET/fights/:id(:format)fights#show
fights(路径
是索引操作的路径,除了可选的:format
之外,helper不需要任何参数。这将生成到/fights的链接。30
@BroiSatse是的,这是我在下面的回答中所说的。。。这就是问题所在,看看他的redirect\u to
@SsouLlesS-你可以在他的编辑中看到,他已经使用了fight\u path
,这意味着fight\u path
url\u helper definitioni更新了我的评论,这个问题出现在我发出post请求后,然后尝试重定向到fights show页面。看一看,让我知道。在这里发布“post”请求有什么必要?理想情况下,它应该是GET request,并且您也在routes.rb中定义了一个routes。rb为:GET/fights/:id(:format)fights#showfights(路径
是索引操作的路径,除了可选的:format
之外,helper不需要任何参数。这将生成到/fights的链接。30
@BroiSatse是的,这是我在下面的回答中所说的。。。这就是问题所在,看看他的redirect\u to
@SsouLlesS-你可以在他的编辑中看到,他已经使用了fight\u path
,这意味着fight\u path
url\u helper definitionfirst一个给我一个连接错误。第二个显示的错误与我在第一篇文章中的错误相同。第一个显示的是连接错误。第二个显示的错误与我在第一篇文章中的错误相同。虽然你的答案很有道理,并帮助我理解它,但解决方案本身不起作用@然而,pitabas prathal的第一个解决方案解决了这个问题。我相信这可能与我的应用程序的结构有关。在您的回答之后,我得到的错误是‘没有路线匹配{:操作=>“显示”,:攻击者id=>9,:控制器=>“战斗”,:防御者id=>8,:id=>8,:获胜者=>8}缺少所需的键:[:id]'