質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1211閲覧

ActionView::Template::Error: 'nil' is not an ActiveModel-compatible object. It must implement :to_pa

kelt22

総合スコア46

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/01/13 16:50

前提・実現したいこと

Ruby on Railsで下記のようなエラーがテストで表示されます。しかしブラウザ上ではエラーが発生しません。
@feedsがテストではnilになるみたいなんですが、ブラウザ上ではしっかり動き、binding.pryをつかって@feedsを確認してみても、しっかりデータがあり、nilではありません。testの書き方に問題がありhomeアクションがうまく機能していないんじゃないかと思っています。

発生している問題・エラーメッセージ

Error: PostsControllerTest#test_login_post: ActionView::Template::Error: 'nil' is not an ActiveModel-compatible object. It must implement :to_partial_path. app/views/pages/home.html.erb:12:in `_app_views_pages_home_html_erb__1017084688_157018920' app/controllers/posts_controller.rb:8:in `create' test/controllers/posts_controller_test.rb:32:in `block (2 levels) in <class:PostsControllerTest>' test/controllers/posts_controller_test.rb:31:in `block in <class:PostsControllerTest>'

該当のソースコード

テスト内容

ruby

1require 'test_helper' 2 3class PostsControllerTest < ActionDispatch::IntegrationTest 4 def setup 5 @user=users(:michael) 6 end 7 8 test "login post" do 9 get login_path 10 post login_path params:{session:{name:@user.name,password:'password'}} 11 get root_path 12 assert_difference 'Post.count',1 do 13 post posts_path, params: { post: { content: "Lorem ipsum" } } 14 end 15 assert_template 'pages/home' 16 assert_not flash.empty? 17 assert_no_difference 'Post.count' do 18 post posts_path, params: { post: { content: "" } } 19 end 20 assert_select 'div#error_explanation' 21 end 22end 23

view home.html.erb

ruby

1<% if log_in?%> 2 <h2><%=current_user.name%></h2> 3 <%= form_with model:@post,url:posts_url,local:true,class:"container" do |f|%> 4 <%= render 'shared/error_messages',model: f.object %> 5 <div class="form-group "> 6 <%= f.label :content%> 7 <%= f.text_field :content,class:"form-controll"%> 8 </div> 9 <%= f.submit "post",class:"btn btn-primary"%> 10 <%end%> 11 <ol> 12 <%= render @feeds%> 13 </ol> 14<% else%> 15 <h1>Pages#home</h1> 16 <p>Find me in app/views/pages/home.html.erb</p> 17<% end%>

controller

ruby

1class PagesController < ApplicationController 2 def home 3 if log_in? 4 @post=current_user.posts.build 5 @feeds=current_user.feed 6 end 7 end 8end 9

メソッド feed

ruby

1class User < ApplicationRecord 2 has_many :posts, dependent: :destroy 3 before_validation :delete_whitespace 4 validates :name, presence: true, length: { maximum: 50 },uniqueness: true 5 has_secure_password 6 validates :password, presence: true, length: { minimum: 6 }, allow_nil: true 7 def User.digest(string) 8 cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : 9 BCrypt::Engine.cost 10 BCrypt::Password.create(string, cost: cost) 11 end 12 13 def feed 14 Post.where("user_id = ?", id) 15 end 16 private 17 def delete_whitespace 18 self.name = name.strip 19 end 20end 21

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

質問

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

該当のソースコード

ソースコード

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

質問

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

該当のソースコード

ソースコード

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問