質問編集履歴

2 エラーに関する追記

退会済みユーザー

退会済みユーザー

2020/07/22 08:23  投稿

NoMethodError in Users#tasksの解決方法について
### 前提・実現したいこと
現在、ToDo機能付きのメモアプリ作成中です。
ユーザー詳細ページからメモ投稿履歴とToDo済みの投稿を分けて見れる形式にしておりますが、
ToDo済みの投稿が標記エラーにより表示できない状態です。お手数おかけしますが、解決方法をご教授願います。
### 発生している問題・エラーメッセージ
```
NoMethodError in Users#tasks
undefined method `content' for nil:NilClass
```
ソースコードを後述しますが、メソッドは定義されているように思います。
### 該当のソースコード
```ここに言語名を入力
tasks.html.erb(ToDo済み投稿のビュー)
   <% @tasks.each do |task| %>
   <% post = Post.find_by(id: task.post_id) %>
     <div class="posts-index-item">
      ** <%= link_to(post.content, "/posts/#{post.id}") %> **←エラー指定箇所
     </div>
   <% end %>
```
```
routes.rb
Rails.application.routes.draw do
 root to: 'home#top'
 #ToDo機能に関するルーティング
 post 'tasks/:post_id/create' => 'tasks#create'
 post 'tasks/:post_id/destroy' => 'tasks#destroy'
 #ユーザー機能(users)に関するルーティング
 get 'users/:id/tasks' => 'users#tasks'
 get 'users/:id/edit' => 'users#edit'
 post 'users/:id/update' => 'users#update'
 post 'users/create' => 'users#create'
 get 'signup' => 'users#new'
 get 'users/index' => 'users#index'
 get 'users/:id' => 'users#show'
 post 'login' => 'users#login'
 post 'logout' => 'users#logout'
 get 'login' => 'users#login_form'
 #投稿(posts)に関するルーティング
 get 'posts/index' => 'posts#index'
 get 'posts/new' => 'posts#new'
 get 'posts/:id' => 'posts#show'
 post 'posts/create' => 'posts#create'
 get 'posts/:id/edit' => 'posts#edit'
 post 'posts/:id/update' => 'posts#update'
 post 'posts/:id/destroy' => 'posts#destroy'
 #トップページとアプリ概要ページ(about)に関するルーティング
 get 'home/top'
 get 'home/about'
```
### 試したこと
ルーティングの確認(漏れなどがないか)
### 補足情報(FW/ツールのバージョンなど)
追記:テスト用にテストユーザーを5つ用意しているのですが、**2つ目に作ったテストユーザーでログインした時にのみ**エラーが発生します。  
Rails ver 6.0.3.2で作成中
昨日までソースコードの通りアプリを動かしていたのですが、標記エラーは表示されませんでした。(ルーティングはソースコードの状態から触っていません)
  • Ruby on Rails

    17569 questions

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

1 タイトル修正

退会済みユーザー

退会済みユーザー

2020/07/22 08:05  投稿

NoMethodError in Users#taskの解決方法について
NoMethodError in Users#tasksの解決方法について
### 前提・実現したいこと
現在、ToDo機能付きのメモアプリ作成中です。
ユーザー詳細ページからメモ投稿履歴とToDo済みの投稿を分けて見れる形式にしておりますが、
ToDo済みの投稿が標記エラーにより表示できない状態です。お手数おかけしますが、解決方法をご教授願います。
### 発生している問題・エラーメッセージ
```
NoMethodError in Users#tasks
undefined method `content' for nil:NilClass
```
ソースコードを後述しますが、メソッドは定義されているように思います。
### 該当のソースコード
```ここに言語名を入力
tasks.html.erb(ToDo済み投稿のビュー)
<% @tasks.each do |task| %>
<% post = Post.find_by(id: task.post_id) %>
<div class="posts-index-item">
** <%= link_to(post.content, "/posts/#{post.id}") %> **←エラー指定箇所
</div>
<% end %>
```
```
routes.rb
Rails.application.routes.draw do
root to: 'home#top'
#ToDo機能に関するルーティング
post 'tasks/:post_id/create' => 'tasks#create'
post 'tasks/:post_id/destroy' => 'tasks#destroy'
#ユーザー機能(users)に関するルーティング
get 'users/:id/tasks' => 'users#tasks'
get 'users/:id/edit' => 'users#edit'
post 'users/:id/update' => 'users#update'
post 'users/create' => 'users#create'
get 'signup' => 'users#new'
get 'users/index' => 'users#index'
get 'users/:id' => 'users#show'
post 'login' => 'users#login'
post 'logout' => 'users#logout'
get 'login' => 'users#login_form'
#投稿(posts)に関するルーティング
get 'posts/index' => 'posts#index'
get 'posts/new' => 'posts#new'
get 'posts/:id' => 'posts#show'
post 'posts/create' => 'posts#create'
get 'posts/:id/edit' => 'posts#edit'
post 'posts/:id/update' => 'posts#update'
post 'posts/:id/destroy' => 'posts#destroy'
#トップページとアプリ概要ページ(about)に関するルーティング
get 'home/top'
get 'home/about'
```
### 試したこと
ルーティングの確認(漏れなどがないか)
### 補足情報(FW/ツールのバージョンなど)
Rails ver 6.0.3.2で作成中
昨日までソースコードの通りアプリを動かしていたのですが、標記エラーは表示されませんでした。(ルーティングはソースコードの状態から触っていません)
  • Ruby on Rails

    17569 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る