2015-12-29 80 views
0

My screenshot不能找到模型與id錯誤

我有留言揚聲器模型。 我想要顯示每個發言者在頁面索引頁上發佈的消息數量。當我插入@speaker = Speaker.find(params [:id])它顯示錯誤無法找到揚聲器'id'=。我不明白我做錯了什麼。

我的網頁控制器

class PagesController < ApplicationController 

    def home 
    @messages = Message.all.order("created_at DESC") 

    @speakers = Speaker.all 

    @speaker = Speaker.find(params[:id]) 
    @count = @speaker.messages.count 
    @listeners = Listener.all 
    end 
    def about 

    end 
    def show 
    @speaker = Speaker.find(params[:id]) 
    end 

end 

和我家的觀點

<%= @count %>&nbsp;Messages 
+0

嘗試在每個* find *前打印params [:id]的值,確保它是一個數字 –

回答

0

我想我需要看到你的routes.rb和整個家庭,以便更好地理解。我的猜測是,你實際上並沒有傳遞參數來尋找它。

例如,如果你的路線看起來像這個例子路線:

# Example of regular route: 
    # get 'products/:id' => 'catalog#view' 

當你去到URL產品/ 1,它知道的1(params[:id] = 1)參數ID傳遞給控制器​​。否則,您需要通過鏈接以某種方式將它傳遞給GET請求。由於它是您的主頁,我懷疑這是您的應用程序的預期設置。

我的猜測是你試圖循環瀏覽主頁上的所有發言者。在這種情況下,您可以獲得相同的效果,但代碼更簡單。這只是一個猜測,但你可以做這樣的事情在你的控制器和視圖:

class PagesController < ApplicationController 
    def home 
    @speakers = Speaker.all 
    end 
end 

<% @speakers.each do |speaker| %> 
    <%= speaker.name %>: <%= speaker.messages.count %> messages 

    <ul> 
    <% speaker.messages.each do |message| %> 
     <li><%= message.body %></li> 
    <% end %> 
    </ul> 
<% end %> 

這將打印出說話者的姓名和消息計數,然後所有的信息,假設你設置的他們之間的關係在你的模型中。

+0

謝謝。它的工作,是的,我想只是在我的主頁上循環。我沒有意識到我需要在顯示<%= speaker.messages.count%> – user554505

+0

之前先將它放入循環中。沒問題!你有沒有試過Michael Hartl的書?這對學習Rails非常有用,並且在線版本是免費的。你可以在這裏找到它:https://www.railstutorial.org/book – Sia