2017-04-05 54 views
0

我越來越發現錯誤附表ActiveRecord::RecordNotFound in ScheduleController#show Couldn't find Schedule with 'id'=swarm無法與「ID」 =

,當我點擊我的路線之一,我估計這是由於活動記錄尋找id=swarm,並沒有找到它,因爲它的錯誤觸發不存在。

我的方法/路線swarm(etc ...)找到了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

ID不應該是移動root'swarm'它應該是一個整數,是指記錄id 。你能否發表你的看法? – araratan

回答

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/:idresources :schedule產生被匹配,它被重定向到schedule#showid = swarm

解決方案路線的順序:

移動其他路線下的時間表資源路線。改變這種狀況的工作

注:還有一兩件事,在路由文件的終值

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 
+0

謝謝@ Deepak-Mahakale解決了這個問題。 出於好奇,正如ExperimentsWithCode指出的,這可能不是RESTful路由。因此,如果我所做的事情有更好的簡單解決方案,我就會全神貫注。 –

0

id值不應該是swarm。它應該是一個指向你的記錄ID的整數。

假設你正在引發認爲請求時,它應該是鏈接此:

<%= link_to "Show", schedules_path(schedule) %> 
0

假設要鏈接到your_url.whatever /時間表/羣/ ID,其中id是等於一個有效的ID在你桌子裏的一排。

您可能需要在路由中定義通配符「id」。

get 'schedule/swarm/:id' 

檢查param [:id]是否存在的一種方法是在代碼中添加一個調試器。您可以在您的gem文件中要求byebug。然後添加debugger作爲show方法的第一行。如果您在本地運行並且在終端中運行rails s,則應該暫停並讓您在此時與您的代碼進行交互。輸入param [:id]來查看參數是什麼以及id是否存在。如果不存在,請嘗試按上面所述添加它。

我知道:id會自動放置在寧靜的路線中,但是您似乎沒有做安靜的路線。