前提・実現したいこと
Rails初学者のものです。エラー解決ができず丸一日消費してしまいました。先輩方のお力をお貸しいただきたいです。
###【前提】
・時間帯別の予約システムを作っています
※Twitterのコメント機能を参考にして機能を実装しております。
###【実現したいこと】
すでにBooksのDB上に登録してある時間帯をOrdersのDB上に登録したい
Books#index上に表示させている時間帯をネストさせたOrders#indexに遷移させた際に「NoMethodError in Orders#index(undefined method `orders_path' for #<#Class:0x00007fad42e78af0:0x00007fad42e83130>)」が表示された
発生している問題・エラーメッセージ
NoMethodError in Orders#index(undefined method `orders_path' for #<#<Class:0x00007fad42e78af0>:0x00007fad42e83130>
terminal
1ActionView::Template::Error (undefined method `orders_path' for #<#<Class:0x00007fad42e78af0>:0x00007fad42e83130>): 2 4: <p class="book_date"><%= @book.date %></p> 3 5: 4 6: 5 7: <%= form_with model: @order, id: 'charge-form', class: 'card-form',local: true do |f| %> 6 8: <div class='form-wrap'> 7 9: <%= f.label :name, "名前" %> 8 10: <%= f.text_field :name, class:"name", placeholder:"氏名" %> 9 10app/views/orders/index.html.erb:7
該当のソースコード
routes
1Rails.application.routes.draw do 2 root to: 'books#index' 3 4 resources :books, only:[:index] do 5 resources :orders, only:[:index, :create] 6 end 7end
BooksModel
1class Book < ApplicationRecord 2 has_one :order 3end
OrdersModel
1class Order < ApplicationRecord 2 belongs_to :book 3end 4
Booksindex
1<section class="fv"> 2 <div class="container"> 3 <p class="fv-text">好きな人と、好きなときに、好きなタイミングで。</p> 4 </div> 5</section> 6 7<section class="concept" id="concept"> 8 <div class="container"> 9 <h2 class="section-title"><span>Our CONCEPT</span>コンセプト</h2> 10 <ul class="concept-card"> 11 <li class="concept-item"> 12 <img src="" alt=""> 13 <p class="item-title">プロの機材が使えます</p> 14 <p class="item-text"> 15 来ていただいた方々全員がプロが撮影現場で使う<br> 16 カメラ・照明が使用できます。<br> 17 スマホよりも圧倒的な高画質で写真がとれる! 18 </p> 19 <p class="concept-number">CONCEPT 01</p> 20 </li> 21 <li class="concept-item"> 22 <img src="" alt=""> 23 <p class="item-title">誰の目も気にする必要はありません</p> 24 <p class="item-text"> 25 完全個室で貸切の空間。撮影中スタッフはいません<br> 26 あなただけの空間で、好きなミュージックをかけて<br> 27 緊張せずに思いっきり楽しめます! 28 </p> 29 <p class="concept-number">CONCEPT 02</p> 30 </li> 31 <li class="concept-item"> 32 <img src="" alt=""> 33 <p class="item-title">好きなタイミングでシャッターを押せる</p> 34 <p class="item-text"> 35 撮影用リモコンを使って、好きなタイミング、<br> 36 好きな角度、ポーズを自由に決めて<br> 37 自分史上最高の自分と出会える! 38 </p> 39 <p class="concept-number">CONCEPT 03</p> 40 </li> 41 </ul> 42 <p class="concept-message">ご家族・恋人・お友達同士とナチュラルな表情で写真撮影するならCREATiVE × COSAYへ!</p> 43 </div> 44</section> 45 46<section class="booking-now" id="book"> 47 <div class="container"> 48 <h2 class="section-title"><span>Book Now</span>ご予約のお客様</h2> 49 <%#= @post.content %> 50 <%#= @post.created_at %> 51 52 <% @books.first(30).each do |book| %> 53 <%= link_to book_orders_path(book.id) do %> 54 <div class="post"> 55 <div class="post-date"> 56 <p>予約日時:<%= book.date %></p> 57 </div> 58 </div> 59 <% end %> 60 <% end %> 61 <%# rubyコードの埋め込み %> 62 </div> 63</section> 64 65 66<section class="price-list" id="price"> 67 <div class="container"> 68 <h2 class="section-title"><span>OUR Price</span>料金一覧</h2> 69 <ul class="price-card"> 70 <li class="price-item"> 71 <h3>スタンダード</h3> 72 <p class="price">¥ 2500 / 回</p> 73 <div class="price-wrapper"> 74 <p class="detail">人数</p> 75 <p class="more-detail">1人</p> 76 </div> 77 78 <div class="price-wrapper"> 79 <p class="detail">もらえるデータ</p> 80 <p class="more-detail">すべて</p> 81 </div> 82 83 <div class="price-wrapper"> 84 <p class="detail">時間</p> 85 <p class="more-detail">1時間</p> 86 </div> 87 88 <div class="price-wrapper"> 89 <p class="detail">延長</p> 90 <p class="more-detail">不可</p> 91 </div> 92 93 <div class="price-wrapper"> 94 <p class="detail">データ転送</p> 95 <p class="more-detail">ご自身で</p> 96 </div> 97 </li> 98 </ul> 99 </div> 100</section>
Ordersindex
1 2 3 <h2 class="booking_title">予約日時</h2> 4 <p class="book_date"><%= @book.date %></p> 5 6 7<%= form_with model: @order, id: 'charge-form', class: 'card-form',local: true do |f| %> 8 <div class='form-wrap'> 9 <%= f.label :name, "名前" %> 10 <%= f.text_field :name, class:"name", placeholder:"氏名" %> 11 </div> 12 13 <div class='form-wrap'> 14 <%= f.label :mail, "メールアドレス" %> 15 <%= f.text_field :mail, class:"mail", placeholder:"メールアドレス" %> 16 </div> 17 18 <div class='form-wrap'> 19 <%= f.label :number, "電話番号" %> 20 <%= f.text_field :number, class:"number", placeholder:"電話番号" %> 21 </div> 22 23 <%= f.submit "予約する", class:"button", id: "button" %> 24<% end %>
OrdersController
1class OrdersController < ApplicationController 2 def index 3 @book = Book.find(params[:book_id]) 4 @order = Order.new 5 end 6 7 def create 8 @order = Order.new(order_params) 9 if @order.valid? 10 @order.save 11 return redirect_to root_path 12 else 13 render 'index' 14 end 15 end 16 17 18 private 19 20 def order_params 21 params.require(:order).permit(:name, :mail, :number).merge(book_id: params[:book_id]) 22 end 23 24end 25
試したこと
・form_withにURLを直接指定したが解決に至らなかった
・そのほか調べた解決法の実行したが解決しなかった
補足情報(FW/ツールのバージョンなど)
Ruby on Rails6
デプロイはまだしてません
あなたの回答
tips
プレビュー