在http:// localhost:3000 / entries / view_all上引发错误

时间:2016-10-12 10:48:46

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

嗨,大家好我正在做第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 %>

3 个答案:

答案 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

<强>更新

显然,ContentEntry模型上属性的名称,因此应该是它的实际外观:

@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">&#xE87E;</i></router-link> 方法只需要find或多个id作为参数,因此要获取所有行,您可以执行以下操作:

ids

或旧版本,您可以按照问题评论中的建议进行操作