嗨,大家好我正在做第13章关于开始红宝石。我在访问http://localhost:3000/entries/view_all时遇到了这个错误。即使我试图查看带有值的数据库条目,它仍然无法正常工作。
这是预期的结果
这是我现在面临的错误:
Couldn't find all Entries with 'id': (all, {:include=>:Content, :order=>"created_at DESC"}) (found 0 results, but was looking for 2)
代码:
def view_all
#@entries = Entry.all(:order => 'created_at DESC')
@entries = Entry.find(:all, :include => :Content, :order => "created_at DESC")
end
这是我的参赛作品控制员:
def view_all
@entries = Entry.find(:all, :include => :Content, :order => "created_at DESC")
end
这是我的routes.rb:
Rails.application.routes.draw do
resources :users
resources :entries do
get :view_all, on: :collection
end
end
这是我的view_all.html.erb:
<% @entries.each do |entry| %>
<h1><%= entry.Title %></h1>
<p><%= entry.Content %></p>
<p><em>Posted at <%= entry.created_at %></em></p>
<% end %>
<%= link_to 'Add New Entry', new_entry_path %>
答案 0 :(得分:1)
从Rails 4开始,不推荐使用find语法。
@entries = Entry.find(:all, :include => :Content, :order => "created_at DESC")
应该成为。
@entries = Entry.where(:include => :Content, :order => "created_at DESC")
答案 1 :(得分:1)
您收到此错误的原因是find
方法尝试根据ID 查找所有记录(解释为here)。因此字符串:all, :include => :Content, :order => "created_at DESC"
被视为ID,这就是rails抱怨的原因。
相反,要获取所有记录(没有约束),请使用恰当命名的all method。这就是您的代码应该是这样的:
@entries = Entry.includes(:content).order('created_at DESC').all
<强>更新强>
显然,Content
是Entry
模型上属性的名称,因此此应该是它的实际外观:
@entries = Entry.order('created_at DESC').all
为了将来参考,您应该按照小写字母命名属性,这是ruby代码的惯例。即
class Entry
attr_accessor :content, :title
end
而不是
class Entry
attr_accessor :Content, :Title
end
祝你进一步学习顺利: - )
答案 2 :(得分:1)
如果您使用大于4的rails版本,那么<router-link :to="{ path: 'home' }"><i @click="test"></i></router-link>
方法只需要find
或多个id
作为参数,因此要获取所有行,您可以执行以下操作:
ids
或旧版本,您可以按照问题评论中的建议进行操作