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

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

ただいまの
回答率

89.06%

レビュー機能実装中にMysqlでのエラー

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 79

nakajima777

score 1

前提・実現したいこと

rubyでairbnbのようなシェアリングシステムを作っています。
レビュー機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

レビューを書き込み、追加しようとすると以下のようなエラーが発生します。

イメージ説明

該当のソースコード

ruby2.5.1
rails5.2.4

<guest_reviews_controller.rb>

class GuestReviewsController < ApplicationController

def create

Step 1: Check if the reservation exist (camera_id, host_id, host_id)

Step 2: Check if the current host already reviewed the guest in this reservation.

@reservation = Reservation.where(
id: guest_review_params[:reservation_id],
camera_id: guest_review_params[:camera_id]
).first

if !@reservation.nil? && @reservation.camera.user.id == guest_review_params[:host_id].to_i

@has_reviewed = GuestReview.where(
reservation_id: @reservation.id,
host_id: guest_review_params[:host_id]
).first

if @has_reviewed.nil?

Allow to review

@guest_review = current_user.guest_reviews.create(guest_review_params)
flash[:success] = "Review created..."
else

Already reviewed

flash[:success] = "You already reviewed this Reservation"
end
else
flash[:alert] = "Not found this reservation"
end

redirect_back(fallback_location: request.referer)
end

def destroy
@guest_review = Review.find(params[:id])
@guest_review.destroy

redirect_back(fallback_location: request.referer, notice: "Removed...!")
end

private
def guest_review_params
params.require(:guest_review).permit(:comment, :star, :camera_id, :reservation_id, :host_id)
end
end

<schma.rb>

create_table "reviews", force: :cascade do |t|
t.text     "comment"
t.integer  "star", default: 1
t.integer  "camera_id"
t.integer  "reservation_id"
t.integer  "guest_id"
t.integer  "host_id"
t.string   "type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["camera_id"],      name: "index_reviews_on_camera_id"
t.index ["guest_id"],       name: "index_reviews_on_guest_id"
t.index ["host_id"],        name: "index_reviews_on_host_id"
t.index ["reservation_id"], name: "index_reviews_on_reservation_id"
end

<gem>

ruby '2.5.1'

gem 'rails', '~> 5.2.4', '>= 5.2.4.3'
gem 'sqlite3'
gem 'puma', '~> 3.11'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'

gem 'coffee-rails', '~> 4.2'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'bootsnap', '>= 1.1.0', require: false

group :development, :test do
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
gem 'capybara', '>= 2.15'
gem 'chromedriver-helper'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

gem 'bootstrap-sass', '~> 3.4.1'
gem 'devise'

gem 'toastr-rails'
gem 'jquery-rails', '4.3.1'

gem 'paperclip', '~> 5.1.0'
gem 'aws-sdk', '~> 2.8'

gem 'geocoder', '~> 1.4'
gem 'jquery-ui-rails', '~> 5.0'

gem "ransack", '~> 2.1.1'

gem 'carrierwave'

試したこと

migrationの打ち間違いがないか確認。
該当エラーをググってみたが見つかりませんでした。

足りないリソースあれば、提供させて頂きます。

よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • daihi

    2020/08/03 02:14

    あれ、foreign_keyがなんか怪しいです。
    guest_reviewsテーブルには、user_idは存在せず、guest_idがあるのでしょうか?

    もしそうであれば、
    GuestReviewモデルのアソシエーションで、Userモデルに従属させてますが、そこへ
    foreign_key: "guest_id" の記述が必要かもしれません。

    キャンセル

  • daihi

    2020/08/03 02:20

    ああ、has_manyにすでに指定があるからいいかもしれない?ですね。。

    キャンセル

  • nakajima777

    2020/08/03 20:16

    class GuestReview < Review
    belongs_to :guest, class_name: "User", foreign_key: "guest_id"
    end

    上記で試してみたのですが、やはりエラー解消しませんでした、、

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 89.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る