###前提・実現したいこと
Ruby on RailsでCtoCのサイトを作っています。
現在、予約のモデルを作成し、さらに予約フォームを作成しようとしています。
予約のフォームを作るために、tarminalにてreservationのモデルを作成しました。
その後、modelのreservations.rb、reservations_controller.rbを作成しました。
次にviewを作ろうとしている状態です。
form_forタグを使い、pathを書いたところ、以下のエラーメッセージが発生しました。
おそらく、reservations#createのpathの受け渡しがうまくいっていないのだと思いますが、rubyのテキストなどをみても、エラーの原因がわかりません。
どなたか、教えていただけないでしょうか。
teratailでの初めての質問で、何を書いて良いのかわからないのですが、現在の状況は、以下の通りです。
よろしくお願いいたします。
###発生している問題・エラーメッセージ
NameError in Listings#show Showing /Users/komorigasa/Desktop/Travelshare/app/views/listings/show.html.erb where line #86 raised: uninitialized constant Listing::Reservation Extracted source (around line #86): 85 <div class="panel-body panel-real"> 86 <%= form_for [@listing, @listing.reservations.build] do |f| %> Rails.root: /Users/komorigasa/Desktop/Travelshare Application Trace | Framework Trace | Full Trace app/views/listings/show.html.erb:86:in `_app_views_listings_show_html_erb__1810852686616138623_70176348929420'
以下は、私のソースコードです。
ルート、コントローラー、ビューの順で作っています。
###route.rb
Rails.application.routes.draw do resources :listings root :to => "pages#index" devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks', registrations: 'registrations' } resources :users, only: [:show] resources :photos, only: [:create, :destroy] do collection do get :list end end resources :listings do resources :reservations, only: [:create,] end get 'manage-listing/:id/basics' => 'listings#basics', as: 'manage_listing_basics' get 'manage-listing/:id/description' => 'listings#description', as: 'manage_listing_description' get 'manage-listing/:id/address' => 'listings#address', as: 'manage_listing_address' get 'manage-listing/:id/price' => 'listings#price', as: 'manage_listing_price' get 'manage-listing/:id/photos' => 'listings#photos', as: 'manage_listing_photos' get 'manage-listing/:id/calendar' => 'listings#calendar', as: 'manage_listing_calendar' get 'manage-listing/:id/bankaccount' => 'listings#bankaccount', as: 'manage_listing_bankaccount' get 'manage-listing/:id/publish' => 'listings#publish', as: 'manage_listing_publish' end
###reservations_controller.rb
class ReservationsController < ApplicationController before_action :authenticate_user! def create @reservation = current_user.reservations.create(reservation_params) redirect_to @reservation.listing, notice: "予約が完了しました。" end private def reservation_params params.require(:reservation).permit(:number, :by_time, :price, :total_price, :listing_id) end end
###show.html.erb
<!-- 予約フォーム --> <div class="col-md-3"> <div class="panel panel-default panel-show"> <div class="panel-heading"> <span style="font-size:16px;"><%= @listing.price %>円(一荷物あたり)</span> </div> <div class="panel-body panel-real"> <%= form_for [@listing, @listing.reservations.new] do |f| %> <!-- 予約時に一緒におくるデータ--> <%= f.hidden_field :listing_id, value: @listing.id %> <%= f.hidden_field :price, value: @listing.price %> <%= f.hidden_field :total_price, id:'reservation_total_price' %> <div class="row row-space-2"> <div class="col-md-6"> <label>Check In</label> <%= f.text_field :price, :class => 'form-control', placeholder: '価格' %> </div> <div class="col-md-6"> <label>Check Out</label> <%= f.text_field :by_date, :class => 'form-control', placeholder: '期限' %> </div> </div> <div class="actions text-center"> <%= f.submit "この日程で予約する", class: "btn btn-danger btn-wide" %> </div> <% end %> </div> </div> </div>
###reservation.rb
class Resevation < ApplicationRecord belongs_to :user belongs_to :listing end
listing.rb
class Listing < ActiveRecord::Base belongs_to :user has_many :photos has_many :reservations validates :travel_type, presence:true validates :travel_country, presence:true validates :travel_departure, presence:true validates :travel_arrival, presence:true geocoded_by :address after_validation :geocode, :if => :address_changed? end
###user.rb
class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable has_many :listings has_many :reservations end
追記エラー
ActiveRecord::StatementInvalid in Listings#show Showing /Users/komorigasa/Desktop/Travelshare/app/views/listings/show.html.erb Could not find table 'reservations' Extracted source (around line #86): 85 <div class="panel-body panel-real"> 86 <%= form_for [@listing, @listing.reservations.build] do |f| %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/08 16:23
2018/01/08 16:29
2018/01/08 16:35 編集
2018/01/08 16:34
2018/01/08 16:36
2018/01/08 16:39
2018/01/08 16:46
2018/01/08 16:50
2018/01/08 16:54
2018/01/08 16:59 編集
2018/01/08 16:57