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

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

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

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

Ruby on Rails

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

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

Q&A

解決済

1回答

1029閲覧

【Ruby on Rails5 速習実践ガイド第4章】NoMethodErrorを解決できません。どうしたら解決できるでしょうか。

ShinjiAsai

総合スコア51

Ruby

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

Ruby on Rails

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

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

0グッド

0クリップ

投稿2019/08/26 08:11

状況

Ruby on Rails5 速習実践ガイド第4章の内容を勉強している中で、NoMethodErrorが発生してしまい、それを解決できず、Localhost3000に関連するページを開くことができなくなってしまいました。
調べても、エラー内容をよく理解できず、解決できなかったため、質問しました。

#エラー
undefind method 'stringify_keys' for "/tasks":Stringのことをググったのですが、理解できずという感じです。

イメージ説明

ソースコード

とりあえず関連がありそうなソースコードを記載しておきます。もし他に必要なソースコードがあれば教えていただけると幸いです。

tasks_controller.rb

class

1 before_action :set_task, only: [:show, :edit, :update, :destroy] 2 3 def index 4 @tasks = current_user.tasks.order(created_at: :desc) 5 end 6 7 def show 8 9 end 10 11 def new 12 @task = Task.new 13 end 14 15 def edit 16 17 end 18 19 def update 20 21 @task.update!(task_params) 22 redirect_to tasks_url, notice: "タスク「#{task.name}」を更新しました" 23 end 24 25 def destroy 26 @task.destroy 27 redirect_to tasks_url, notice: "タスク「#{task.name}」を削除しました" 28 end 29 30 def create 31 @task = current_user.tasks.new(task_params) 32 33 if @task.save 34 redirect_to @task, notice: "タスク「#{@task.name}」を登録しました" 35 else 36 render :new 37 end 38 end 39 40 private 41 42 def task_params 43 params.require(:task).permit(:name, :description) 44 end 45 46 def set_task 47 @task = current_user.tasks.find(params[:id]) 48 end 49end 50

application_controller.slim

doctype

1html 2 head 3 title 4 | Taskleaf 5 = csrf_meta_tags 6 = csp_meta_tag 7 = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' 8 = javascript_include_tag 'application', 'data-turbolinks-track': 'reload' 9 body 10 .app-title.navbar.navbar-expand-md.navbar-light.bg-light 11 .navbar-brand Taskleaf 12 13 ul.navbar-nav.ml-auto 14 - if current_user 15 li.nav-item = link_to 'タスク一覧', tasks_path, class: 'nav-link' 16 - if current_user.admin? 17 li.nav-item = link_to 'ユーザー一覧', admin_users_path, class: 'nav-link' 18 li.nav-item = link_to 'ログアウト', logout_path, method: :delete, class: 'nav-link' 19 - else 20 li.nav-item = link_to 'ログイン', login_path, class: 'nav-link' 21 22 .container 23 -if flash.notice.present? 24 .alert.alert-success= flash.notice 25 = yield 26

routes.rb

Rails.application.routes.draw

1 get '/login', to: 'sessions#new' 2 post '/login', to: 'sessions#create' 3 delete '/logout', to: 'sessions#destroy' 4 5 namespace :admin do 6 resources :users 7 end 8 9 root to: "tasks#index" 10 resources :tasks 11 12 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 13end 14

User_controller.rb

class

1 2 def index 3 @users = User.all 4 end 5 6 def show 7 @user = User.find(params[:id]) 8 end 9 10 def new 11 @user = User.new 12 end 13 14 def edit 15 @user = User.find(params[:id]) 16 end 17 18 def create 19 @user = User.new(user_params) 20 21 if @user.save 22 redirect_to admin_users_path, notice: "ユーザーを「#{@user.name}」登録しました" 23 else 24 render :new 25 end 26 end 27 28 def update 29 @user = User.find(params[:id]) 30 31 if @user.update(user_params) 32 redirect_to admin_users_path(@user), notice: "ユーザーを「#{@user.name}」更新しました" 33 else 34 render :new 35 end 36 end 37 38 def destroy 39 @user = User.find(params[:id]) 40 @user.destroy 41 redirect_to admin_users_url, notice: "ユーザー「#{@user.name}」を削除しました" 42 end 43 44 private 45 46 def user_params 47 params.require(:user).permit(:name, :email, :admin, :password, :password_confirmation) 48 end 49 50 def require_admin 51 redirect_to root_path unless current_user.admin? 52 end 53end 54

session_controller.rb

class

1 skip_before_action :login_required 2 3 def new 4 end 5 6 def create 7 user = User.find_by(email: session_params[:email]) 8 9 if user&.authenticate(session_params[:password]) 10 session[:user_id] = user.id 11 redirect_to root_path, notice: 'ログインしました' 12 else 13 render :new 14 end 15 end 16 17 def destroy 18 reset_session 19 redirect_to root_path, notice: 'ログアウトしました' 20 end 21 22private 23 24 def session_params 25 params.require(:session).permit(:email, :password) 26 end 27end 28

sessions/new.html.slim

h1

1 2= form_with scope: :session, local: true do |f| 3 .form-group 4 = f.label :email, 'メールアドレス' 5 = f.text_field :email, class: 'form-control', id: 'session_email' 6 .form-group 7 = f.label :password, 'パスワード' 8 = f.password_field :password, class: 'form-control', id: 'session_password' 9 = f.submit 'ログインする', class: 'btn btn-primary' 10 11コード

お手数おかけしますが、知恵をお貸しください。よろしくお願いします。

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

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

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

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

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

gouf

2019/08/26 14:59

サポートサイトのページに章ごとの完成版が用意されているようですが、そちらでも同様のエラーは発生しますか? : https://book.mynavi.jp/supportsite/detail/9784839962227.html 完成版の各ファイルを現在作業中のプロジェクトディレクトリに上書きすることで、git 側から差分を検出して問題を発見できるかもしれません (あるいはそのまま進めてしまったほうが 詰まって何もできないよりはいいのかもしれません)
guest

回答1

0

自己解決

ありがとうございます。解決しました。
エラーが出ていたlayouts/application.html.slimのソースコードを、ご提示いただいたURLの完成版のソースコードを置き換えた結果、正常に動作しました。
前のものと見比べても、原因がわからずといったところですが、ひとまず先に進めそうです。ありがとうございました!

投稿2019/08/26 23:58

ShinjiAsai

総合スコア51

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問