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

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

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

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

Q&A

解決済

1回答

732閲覧

railsのタスクアプリでの登録、参照について

waruhime

総合スコア12

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/06/23 13:07

編集2019/06/23 13:33

前提・実現したいこと

ruby on rails5でタスク管理アプリを作っています。
タスクを新規登録する際以下のエラーメッセージが発生しました。

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

NoMethodError in Tasks#show
show.html.slim where line #9 raised:

#####tasks/show.html.slim

h1 ユーザーの詳細 .nav.justify-content-end = link_to '一覧',admin_users_path,class: 'nav-link' table.table.table-hover tbody tr th= User.human_attribute_name(:id) td= @user.id tr th= User.human_attribute_name(:name) td= @user.name tr th= User.human_attribute_name(:email) td= @user.email tr th= User.human_attribute_name(:admin) td= @user.admin? ? 'あり':'なし' tr th= User.human_attribute_name(:created_at) td= @user.created_at tr th= User.human_attribute_name(:updated_at) td= @user.updated_at tr th= User.human_attribute_name(:description) td= auto_link(simple_format(h(@task.description), {}, sanitize: false, wrapper_tag: "div")) =link_to '編集',edit_admin_user_path,class:'btn btn-primary mr-3' =link_to '削除',[:admin,@user],method: :delete, data: { confirm: "ユーザー『#{@user.name}』を削除します。よろしいですか?" }, class: 'btn btn-danger'

#####tasks_controller.rb

class TasksController < ApplicationController before_action :set_task, only: [:show, :edit, :update, :destroy] def index @tasks = current_user.tasks.order(created_at: :desc) end def show end def new @task = Task.new end def edit end def update task.update!(task_params) redirect_to tasks_url, notice:"タスク『#{task.name}』を更新しました。" end def destroy task.destroy redirect_to tasks_url, notice:"タスク『#{task.name}」を削除しました。" end def create @task = current_user.tasks.new(task_params) if @task.save redirect_to @task, notice: "タスク『#{@task.name}』を登録しました。" else render :new end end private def task_params params.require(:task).permit(:name, :description) end def set_task @task = current_user.tasks.find(params[:id]) end end

試したこと

9行目と言われているため、idの新規登録?が出来ていないのかなと思うのですが
どこを修正すれば良いのかがわかりません。
エラーが出た後にurlの数字の部分を消してアクセスするとタスクは無事登録されています。
情報が足りないなどありましたら仰ってください。
どなたかお力貸してください!
よろしくお願い致します。

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

ruby on rails5

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

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

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

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

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

mankoman

2019/06/23 13:17

コントローラーを追記してくれませんか?
waruhime

2019/06/23 13:34

コントローラー追記致しました。 よろしくお願い致します。
guest

回答1

0

ベストアンサー

current_user はtaskを持っていますかね?

@task = current_user.tasks.find(params[:id]) した時に @task が空だとそうなる気がしました。

対策に try とか使ってみるのもありかなと思います

投稿2019/06/23 14:43

t_kusakabe74

総合スコア549

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

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

waruhime

2019/06/24 12:41

回答いただき有難うございます。 def create @task = current_user.tasks.new(task_params) if @task.save redirect_to @task, notice: "タスク『#{@task.name}』を登録しました。" else render :new end end 上記の部分に問題があるということですかね? 知識がなくすみません( ; ; ) 独学で色々調べながらやっていたら混乱してしまいまして。
waruhime

2019/06/24 13:08

新規登録画面の推移無事行うことが出来ました! def create @task = current_user.tasks.new(task_params) if @task.save redirect_to tasks_url, notice: "タスク『#{@task.name}』を登録しました。" else render :new end end 上記のように変更しましたら無事登録できるようになりました。 ただ、タスクの一覧画面がありまして、そこにタスクの名前のリンクをクリックすると詳細画面に飛ぶようにしていたのですが、リンクをクリックすると今回のエラーと同じ内容のものが出てしまうようになってしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問