2016-10-12 17 views
0

こんにちは、私は現在、Rubyの初めに第13章をやっています。 http://localhost:3000/entries/view_allにアクセスするとこのエラーが発生します。私は値で私のデータベースエントリを見てみましたが、それはまったく動作しません。 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 

Thi sが私の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 %> 
+1

gemfile.lockに従ってRails 3.2以下を使用している場合、 'Entry.find(:all、' ...は非推奨で置き換えられましたEntry.where(... 'と' http://stackoverflow.com/a/9650225/193785 – BookOfGreg

+0

@BookOfGreg私は4.0.0 – Suresh

+0

が重複する可能性レールを使用しています[Railsの:検索条件のすべて](のhttp:/ /stackoverflow.com/questions/9650205/rails-find-all-with-conditions) – BookOfGreg

答えて

1

:-)あなたの更なる研究と

class Entry 
    attr_accessor :Content, :Title 
end 

幸運とは対照的に

class Entry 
    attr_accessor :content, :title 
end 

そしてfindメソッドは、引数としてのみidまたは複数idsを取りますすべての行を取得するには、次のようにします。

def view_all 
@entries = Entry.all.includes(:Content).order(created_at: :desc) 
end 

またはあなたの質問のコメントに示唆したように古いバージョンの場合

+0

私はあなたが与えたコマンドを発行しました。 Entryで 'Content'という名前のAssociationが見つかりませんでした。おそらくあなたはそれを間違って綴ったでしょうか?しかし、私は既にエントリのテーブルにテキスト付きの属性コンテンツを定義しました。 - – Suresh

+0

'Content'がここ協会でなければならない、それは' Entry'との関連を持つモデル 'Content'です。これは '' Entry'のattribute'、あなたは '@entries = Entry.all.order(:のcreated_at:DESC)のような' includes'一部を削除することができた場合は ' – Sajan

+0

はそんなにありがとう:) – Suresh

1

検索構文は以降のRails 4から廃止されました。 @entries = Entry.find(:all, :include => :Content, :order => "created_at DESC") になります。 @entries = Entry.where(:include => :Content, :order => "created_at DESC")

1

find方法は、IDに基づいてすべてのレコードを見つけようとするため、このエラーを取得している(hereを説明します)。したがって、文字列:all, :include => :Content, :order => "created_at DESC"はIDとして扱われています。そのため、railsは不平を言っています。

代わりに、すべてレコード(拘束なし)は適切にall methodという名前を使用してください。これはあなたのコードがどのように見えるかです:

@entries = Entry.includes(:content).order('created_at DESC').all 

UPDATE

どうやら、ContentEntryモデルの属性の名前だったので、このは、それが実際にどのように見えるかです:

@entries = Entry.order('created_at DESC').all 

将来的には、ルビコードの場合のように、属性の名前を小文字で指定する必要があります。私。あなたが4より大きいレールのバージョンを使用している場合は

+0

あなたが与えたコマンドを発行したとき。 Entryで 'Content'という名前のAssociationが見つかりませんでした。おそらくあなたはそれを間違って綴ったでしょうか?しかし、私は既にエントリのテーブルにテキスト付きの属性コンテンツを定義しました。 – Suresh

+0

ああ、私はそれが関係だと思った。私はあなたのためにそれを修正します:) – nicohvi

関連する問題