我有消息扬声器模型。 我想显示每个发言者在页面索引页面上发布的消息数量。当我插入@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 %> Messages
答案 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 %>
这将打印出演讲者的姓名和留言计数,然后打印所有留言,假设您在模型中设置了他们之间的关系。