前提・実現したいこと
マイページ内のカレンダーで予定をクリックし、予定の詳細を表示させようと考えています。
ですが、NoMethodError in Trainings#indexが表示されてマイページに遷移すらできない状態です。
エラーの該当箇所のパスを"#"にするとマイページに遷移はできるのですが、予定の詳細を見ようとするとNoMethodError in Trainings#indexが表示されます。
発生している問題・エラーメッセージ
NoMethodError in Trainings#index https://gyazo.com/bf63487e5052a718bd92ba903549953e
該当のソースコード
routes.rb
ruby
1Rails.application.routes.draw do 2 devise_for :users 3 root to: "users#index" 4 resources :user do 5 resources :trainings, only: :show 6 end 7 post 'posts', to: 'trainings#create' 8 get 'trainings', to: 'trainings#index' 9end 10
trainings.controller.rb
ruby
1class TrainingsController < ApplicationController 2 before_action :set_user, except: :index 3 def index 4 @trainings = current_user.trainings 5 end 6 7 def show 8 @trainings = current_user.trainings.find(params[:id]) 9 end 10 11 def new 12 @trainings = current_user.trainings 13 end 14 15 def edit 16 @training = current_user.trainings.find(params[:id]) 17 end 18 19 def update 20 @training = current_user.trainings.find(params[:id]) 21 @training.update(update_params) 22 redirect_to trainings_path(@user.id) 23 end 24 25 def create 26 @training = current_user.trainings.new(training_memo) 27 if @training.save 28 redirect_to trainings_path 29 else 30 redirect_to new_training_path 31 end 32 end 33 34 def destroy 35 @trainings = current_user.trainings.find(params[:id]) 36 @trainings.destroy 37 redirect_to trainings_path(@user.id) 38 end 39 40 41 private 42 def training_memo 43 params.permit(:start_time,:title, :content,:user_id) 44 end 45 46 def set_user 47 @user = User.find(params[:id]) 48 end 49 50 def update_params 51 params.require(:training).permit(:start_time,:title, :content,:user_id) 52 end 53end
index.html.erb
ruby
1<head> 2 <meta charset="utf-8"> 3 <meta name="viewport" content="width=device-width, initial-scale=1"> 4 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.3/css/bulma.min.css"> 5</head> 6 7<nav class="navbar is-primary" role="navigation" aria-label="main navigation"> 8 <div id="example" class="py-5 navbar-menu"> 9 <div class="navbar-start"> 10 <a class="navbar-item" href="/">Your Training</a> 11 </div> 12 <div class="navbar-end"> 13 <div class="navbar-item"> 14 <% if user_signed_in? %> 15 <%= link_to "ログアウト", destroy_user_session_path, method: :delete %> 16 <%= link_to "マイページ", trainings_path %> 17 <% else %> 18 <%= link_to "ログイン", new_user_session_path, class: "post" %> 19 <%= link_to "新規登録", new_user_registration_path, class: "post" %> 20 </div> 21 <% end %> 22 </div> 23 </div> 24 </div> 25</nav> 26 27<div class="columns"> 28 <div class="column is-three-quarters"> 29 <%= month_calendar events: @trainings do |date, trainings| %> 30 <%= date.day %> 31 <% trainings.each do |training| %> 32 <div> 33 <%= link_to training.title, user_training_path(@trainings.id) %> 34 </div> 35 <% end %> 36 <% end %> 37 </div> 38 <div class="column"> 39 <div class="field"> 40 <%= form_with model: @user, url: "/posts", method: :post, local: true do |f|%> 41 <label class="label">タイトル</label> 42 <%= f.text_field :title %> 43 <label class="label">トレーニング内容</label> 44 <%= f.text_area :content%> 45 <label class="label">トレーニングをした日</label> 46 <%= f.date_select :start_time%> 47 <%= f.submit '記録する'%> 48 <% end %> 49 </div> 50 </div> 51</div>
show.html.erb
ruby
1<%= render partial: 'shared/header' %> 2 3<table class="table"> 4 <thead> 5 <tr> 6 <th>トレーニング名</th> 7 <th>トレーニング内容</th> 8 <th></th> 9 <th></th> 10 </tr> 11 </thead> 12 <tbody> 13 <tr> 14 <td><%= training.title%></td> 15 <td><%= training.content%></td> 16 <td><%=link_to "削除", "#", method: :delete , data: {confirm:"削除しますか?"} ,:class=>"btn03"%></td> 17 <tr> 18 </tbody> 19</table>
試したこと
<%= link_to training.title, user_training_path(@trainings.id) %>
を
<%= link_to training.title, user_training_path(@user.trainings.id) %>
に修正したり、
<%= link_to training.title, user_training_path(training.id) %>
に変更したりしましたが、解消できませんでした。
補足情報(FW/ツールのバージョンなど)
gem 'rails', '~> 6.0.0'
回答3件
あなたの回答
tips
プレビュー