我收到错误ActiveRecord::RecordNotFound in ScheduleController#show Couldn't find Schedule with 'id'=swarm
当我点击其中一条路线时会触发错误,我认为这是由于Active Record正在寻找id=swarm
并且因为它不存在而找不到它。
我的方法/路线swarm
(等等)找到了id
并加载没有问题,直到我实施show
方法来显示单个项目。
我的目标是只使用一个控制器来处理所有这些,但我不确定这是否是我的路由或控制器的问题。
schedule_controller.rb
class ScheduleController < ApplicationController
def index
@schedules = Schedule.all
end
def show
@schedules = Schedule.find(params[:id])
end
def swarm
@swarm = Schedule.find([3, 4, 7, 8, 13, 14, 19, 20, 27, 28, 29, 30, 35, 36, 39, 40])
end
def reddevils
@reddevils = Schedule.find([1, 2, 7, 8, 11, 12, 15, 16, 23, 24, 21, 32, 35, 36, 37, 38])
end
def thunder
@thunder = Schedule.find([5, 6, 9, 10, 15, 16, 19, 20, 21, 22, 27, 28, 31, 32, 33, 34])
end
def stampede
@stampede = Schedule.find([1, 2, 9, 10, 13, 14, 17, 18, 21, 22, 25, 26, 29, 30, 37, 38])
end
def admirals
@admirals = Schedule.find([3, 4, 5, 6, 11, 12, 17, 18, 23, 24, 25, 26, 33, 34, 39, 40])
end
end
的routes.rb
Rails.application.routes.draw do
# get 'schedule/index'
resources :schedule
root 'schedule#index'
# Schedule routes
get 'schedule/swarm'
get 'schedule/reddevils'
get 'schedule/thunder'
get 'schedule/stampede'
get 'schedule/admirals'
end
编辑:按要求发布视图:
视图/时间表/ index.html.erb
<div class="container-fluid">
<div class="well team-list">
<ul class="nav nav-pills nav-justified">
<li><%= link_to 'All Games', root_path %></li>
<li><%= link_to 'Botany Swarm', schedule_swarm_path %></li>
<li><%= link_to 'Canterbury Red Devils', schedule_reddevils_path %></li>
<li><%= link_to 'Dunedin Thunder', schedule_thunder_path %></li>
<li><%= link_to 'Skycity Stampede', schedule_stampede_path %></li>
<li><%= link_to 'West Auckland Admirals', schedule_admirals_path %></li>
</ul>
<% @schedules.each do |schedule| %>
<div class="col-xs-6">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">
<h4 class="text-center"><%= schedule.leagueGame %> - <%= schedule.home %> v <%= schedule.away %></h4>
</div>
<div class="panel-body">
<span class="pull-left"><img src="<%= schedule.homeLogo %>" alt="<%= schedule.homeLogo %>"></span>
<span class="text-center">Details of upcoming game <%= link_to 'Game Deets', schedule_path(schedule) %></span>
<span><img class="pull-right" src="<%= schedule.awayLogo %>" alt="<%= schedule.awayLogo %>"></span>
</div>
<div class="panel-footer">
<span class="pull-left"><%= schedule.venue %></span>
<span class="text-center">Tickets</span>
<span class="pull-right"><%= schedule.date %></span>
</div>
</div>
</div>
</div>
<% end %>
</div>
</div>
非常感谢任何帮助!
答案 0 :(得分:1)
这里的问题是路线的排序
Rails.application.routes.draw do
resources :schedule
root 'schedule#index'
get 'schedule/swarm'
get 'schedule/reddevils'
get 'schedule/thunder'
get 'schedule/stampede'
get 'schedule/admirals'
end
路由schedule/swarm
与schedule/:id
生成的resources :schedule
匹配,并被schedule#show
重定向到id = swarm
解决方案:
将资源路线移至其他路线下方。改变它将起作用
注意:还有一件事是在路径文件
的末尾移动root
Rails.application.routes.draw do
get 'schedule/swarm'
get 'schedule/reddevils'
get 'schedule/thunder'
get 'schedule/stampede'
get 'schedule/admirals'
resources :schedule
root 'schedule#index'
end
答案 1 :(得分:0)
id
值不应为swarm
。它应该是一个整数,指的是你的记录ID。
假设您在视图中触发该请求,则应将其链接:
<%= link_to "Show", schedules_path(schedule) %>
答案 2 :(得分:0)
假设您要链接到your_url.whatever / schedule / swarm / id,其中id等于表中行的有效ID。
您可能需要在路线中定义通配符“id”。
signature = hmac.new(b'SECRET', msg=bytearray(nonce), digestmod=hashlib.sha256).digest()
检查param [:id]是否存在的一种方法是在代码中添加调试器。您可以在gem文件中要求Signature
。然后添加get 'schedule/swarm/:id'
作为show方法的第一行。如果您在本地运行并且在终端中运行byebug
,则应暂停并让您在此时与代码进行交互。输入param [:id]以查看该参数是什么以及id是否存在。如果它不存在,请尝试按上述方法添加它。
我知道:id会自动放在restful路由中,但是你似乎没有进行restful路由。