前提・実現したいこと
herokuデプロイ後に正常にアプリを動かしたい。(ローカルでは問題なく動いています)
ローカルでairbnbのようなアプリを作成しており、
ローカルでは問題なく動いている状況ですが、herokuにデプロイしたら機能しなくなりました。
https://qiita.com/hmmrjn/items/e2dff8036fbbd74f049a
上記サイトなどを参考にしていますがエラーが解消されません。
ローカルではSQLite、heroku上ではPostgreSQLを使用しているためエラーが起きていると考えています。
発生している問題・エラーメッセージ
$ heroku logs で以下のエラーが表示されています。
ActionView::Template::Error (PG::UndefinedColumn: ERROR: column photos.camera_id does not exist
こちらのphotos.camera_idが存在しないことがエラー原因だと認識しています。
該当のソースコード
schema.rb
1create_table "cameras", force: :cascade do |t| 2 t.string "camera_type" 3 t.string "company_type" 4 t.string "use_history" 5 t.string "condition" 6 t.string "listing_name" 7 t.text "summary" 8 t.string "address" 9 t.boolean "is_camera_case" 10 t.boolean "is_camera_leg" 11 t.boolean "is_light" 12 t.integer "price" 13 t.boolean "active" 14 t.integer "user_id" 15 t.datetime "created_at", null: false 16 t.datetime "updated_at", null: false 17 t.float "latitude" 18 t.float "longitude" 19 t.index ["user_id"], name: "index_cameras_on_user_id" 20 end 21 22create_table "photos", force: :cascade do |t| 23 t.integer "camera_id" 24 t.datetime "created_at", null: false 25 t.datetime "updated_at", null: false 26 t.string "image_file_name" 27 t.string "image_content_type" 28 t.integer "image_file_size" 29 t.datetime "image_updated_at" 30 t.index ["camera_id"], name: "index_photos_on_camera_id" 31 end
_camera_menu.html.erb(該当箇所)
1<li class="sidebar-item"> 2 <%= link_to "Camera紹介", description_camera_path, class: "sidebar-link active" %> 3 <% if !@camera.listing_name.blank? %> 4 <span class="pull-right text-babu"><i class="fa fa-check"></i></span> 5 <% end %> 6 </li>
photos_controller.rb
1class PhotosController < ApplicationController 2 3 def create 4 @camera = Camera.find(params[:camera_id]) 5 6 if params[:images] 7 params[:images].each do |img| 8 @camera.photos.create(image: img) 9 end 10 11 @photos = @camera.photos 12 redirect_back(fallback_location: request.referer, notice: "アップロードできました!") 13 end 14 end 15 16 def destroy 17 @photo = Photo.find(params[:id]) 18 @camera = @photo.camera 19 20 @photo.destroy 21 @photos = Photo.where(camera_id: @camera.id) 22 23 respond_to :js 24 end 25end 26 27 28```cameras_controller.rb 29class CamerasController < ApplicationController 30 before_action :set_camera, except: [:index, :new, :create] 31 before_action :authenticate_user!, except: [:show] 32 before_action :is_authorised, only: [:listing, :pricing, :description, :photo_upload, :amenities, :location, :update] 33 34 def index 35 @cameras = current_user.cameras 36 end 37 38 def new 39 @camera = current_user.cameras.build 40 end 41 42 def create 43 @camera = current_user.cameras.build(camera_params) 44 if @camera.save 45 redirect_to listing_camera_path(@camera), notice: "登録しました!" 46 else 47 flash[:alert] = "登録できていません!" 48 render :new 49 end 50 end 51 52 def show 53 @photos = @camera.photos 54 @guest_reviews = @camera.guest_reviews 55 end 56 57 def listing 58 end 59 60 def pricing 61 end 62 63 def description 64 end 65 66 def photo_upload 67 @photos = @camera.photos 68 end 69 70 def amenities 71 end 72 73 def location 74 end 75 76 def update 77 78 new_params = camera_params 79 new_params = camera_params.merge(active: true) if is_ready_camera 80 81 if @camera.update(camera_params) 82 flash[:notice] = "保存しました!" 83 else 84 flash[:alert] = "保存できていません!" 85 end 86 redirect_back(fallback_location: request.referer) 87 end 88 89 90 # --- Reservations --- 91 def preload 92 today = Date.today 93 reservations = @camera.reservations.where("start_date >= ? OR end_date >= ?", today, today) 94 95 render json: reservations 96 end 97 98 def preview 99 start_date = Date.parse(params[:start_date]) 100 end_date = Date.parse(params[:end_date]) 101 102 output = { 103 conflict: is_conflict(start_date, end_date, @camera) 104 } 105 106 render json: output 107 end 108 109 def your_trips 110 @trips = current_user.reservations.order(start_date: :asc) 111 end 112 113 def your_reservations 114 @cameras = current_user.cameras 115 end 116 117 118 private 119 120 def is_conflict(start_date, end_date, camera) 121 check = camera.reservations.where("? < start_date AND end_date < ?", start_date, end_date) 122 check.size > 0? true : false 123 end 124 125 def set_camera 126 @camera = Camera.find(params[:id]) 127 end 128 129 def is_authorised 130 redirect_to root_path, alert: "You don't have permission" unless current_user.id == @camera.user_id 131 end 132 133 def is_ready_camera 134 !@camera.active && !@camera.price.blank? && !@camera.listing_name.blank? && !@camera.photos.blank? && !@camera.address.blank? 135 end 136 137 def camera_params 138 params.require(:camera).permit(:camera_type, :company_type, :use_history, :condition, :listing_name, :summary, :address, :is_camera_case, :is_camera_leg, :is_light, :price, :active, :latitude, :longitude) 139 end 140end 141 142``` 143 144### 試したこと 145 146ググった結果、DB周辺が怪しいと思い、いじってみるが解消されず。 147 148何かアドバイスあればよろしくお願いします。 149 150足りないソース等については提示させて頂きます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/05 07:35
2020/08/05 07:53
2020/08/05 08:12
2020/08/05 08:21
2020/08/05 08:33