找不到'id'=的时间表

时间:2017-04-05 02:55:58

标签: ruby-on-rails ruby

我收到错误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>

非常感谢任何帮助!

3 个答案:

答案 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/swarmschedule/: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路由。