无法找到ID错误的模型

时间:2015-12-29 18:18:33

标签: ruby-on-rails ruby-on-rails-4

My screenshot

我有消息扬声器模型。 我想显示每个发言者在页面索引页面上发布的消息数量。当我插入@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

1 个答案:

答案 0 :(得分:0)

我想我需要看看你的routes.rb和整个家庭视图以便更好地理解。我的猜测是你实际上没有传递参数来找到它。

例如,如果您的路线看起来像这个示例路线:

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

当你转到URL products / 1时,它知道将参数id 1(params[:id] = 1)传递给控制器​​。否则,您需要通过链接以某种方式将其传递给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 %>

这将打印出演讲者的姓名和留言计数,然后打印所有留言,假设您在模型中设置了他们之间的关系。