2017-05-09 4 views
0

私はRailsを初めて使い、簡単なブログサイトの作成を含むオンラインチュートリアルを続けています。私は、コントローラとモデルのテストを追加するプロジェクトのポイントにいます。私はposts_controller_test.rbを実行しようとすると、私は次のエラーを取得する:ここでエラー:nilの定義されていないメソッド `name ':NilClass

Error: 
PostsControllerTest#test_should_get_index: 
ActionView::Template::Error: undefined method `name' for nil:NilClass 
    app/views/posts/index.html.erb:7:in `block in _app_views_posts_index_html_erb__805998677_54338856' 
    app/views/posts/index.html.erb:1:in `_app_views_posts_index_html_erb__805998677_54338856' 
    test/controllers/posts_controller_test.rb:5:in `block in <class:PostsControllerTest>' 

bin/rails test test/controllers/posts_controller_test.rb:4 

は私posts_controller_test.rbです:

class PostsControllerTest < ActionDispatch::IntegrationTest 
    test "should get index" do 
    get posts_url 
    assert_response :success 
    assert_not_nil assigns(:posts) 
    end 
end 

チュートリアルが使用され、レールの以前のバージョンで作成しましたget:私が読んだインデックスは、レール5で廃止され、アクション名の代わりにURLを使うことを提案しました。

require 'test_helper' 

class HomeControllerTest < ActionDispatch::IntegrationTest 
    test "should get index" do 
    get home_index_url 
    assert_response :success 
    end 
end 

:ここ

Error: 
HomeControllerTest#test_should_get_index: 
NameError: undefined local variable or method `home_index_url' for #<HomeControllerTest:0x67df790> 
    test/controllers/home_controller_test.rb:5:in `block in <class:HomeControllerTest>' 

bin/rails test test/controllers/home_controller_test.rb:4 

home_controller_test.rbです:私は、私も変更していないコントローラhome_controller_test.rbを、実行している場合

興味深いことに、私は以下の別のエラーを取得します問題が何であるかについての助けは大いに感謝されるでしょう。

<% @posts.each do |post| %> 
    <div class="post"> 
     <h2 class="title"><%= link_to post[:title],post %></h2> 
     <div class="entry"><%= post[:body] %></div> 
     </br> 
     <div class="byline"> 
      <span class="meta"><%= post[:created_at].strftime("%b %d, %Y") %> Posted By: <%= post.admin_user.name %></span><span class="links"><%= link_to "Read More",post %> 
     </div> 
    </div> 
<% end %> 
+0

共有ur 'index'ビュー –

+0

これは、このファイルを意味します:app/views/posts/index.html.erb :) – Gerry

+0

上記のインデックスビューを共有しました。 – henrypj

答えて

0

更新(2017年5月10日)

あなたの投稿のモデルは、主にポストADMINUSERに属し意味admin_user_idました:私の記事インデックスビューを追加

あなたの開発用レールアプリは、すべての投稿に対して常にAdminUserをリンクしているため、エラーを発生させません。しかし、テスト環境では、テスト/フィクスチャフォルダの下にデータベースデータをセットアップする必要があります。あなたのケースでは

は、あなたがテスト/フィクスチャ/ admin_users.yml下ADMINUSER(例。adminUserOne)を作成する必要がある、と

postOne: 
    admin_user: adminUserOne 

ようADMINUSERであなたの記事をリンクした後にのみ、あなたの投稿がADMIN_USERをリンクしています。

良い練習のために

は、ADMIN_USERは、最初のエラーのために

<%= post.admin_user.present? post.admin_user.name : '-' %> 

undefined method `name' for nil:NilClass

app/views/posts/index.html.erb:7

存在しない場合ADMINUSERの存在をチェックして、異なる出力を与え、あなただけのかもしれエラーメッセージは、上記のビューファイルの7行目にあるエラーを示しています。ビューファイルの内容を参照した後、

投稿モデルの下では、admin_userとの関係はありません。 通常、db/schemaの関係を確認できます。サンドボックスモード

rails c --sandbox 

とRBまたは実行中のレールコンソールは、コンソールで指定されるか、結果を観察するために

Post.first.admin_user 

ような何かをしてみてください。 2番目のエラーのために


home_index_urlは、あなたのRailsアプリケーションで有効なURLではありません。レール5に

、何か関連のルートを発見したために、コマンド

rails routes -c home 

を使用することができます。私のアプリケーションでは、私はこの結果に

Prefix

dashboard

root

ので、私はdashboard_urlとroot_urlを持っています。だからあなたのケースでは、プレフィックスhome_indexでルートを持つ必要がありますhome_index_urlを使用することができます。

+0

ありがとうございます。私はあなたが今言っていることを見る...投稿モデルはadmin_user_idで、admin_userではない。だからコンソールで 'Post.first.admin_user'を実行したときは、それは本当にゼロです。私が言及したように、私はRoRを初めて使い、チュートリアルのオンラインに従っています。私が理解していないのは、ビュー内の 'post.admin_user.name'がブラウザーでうまく動作しているように見えることです。名前が実際に表示されます。 – henrypj

+0

@henrypj私のポストを更新しました。チェックしてください。 –

+0

もう一度お世話になります。保存する前に、何らかのバリデーションがないと、リンクされたオブジェクトの可能性に気をつけてください。 – henrypj

関連する問題