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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

0回答

536閲覧

rails ネストされたresourcesのreviewを作成したい。

yoshi544

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/12/19 02:13

編集2021/12/19 02:56

現在、マッサージ店のウェブアプリをrailsで開発しているのですが
お客様のレビュー機能を作成したいと考えているのですが、
create部分がうまく機能せず(roolbackされてしまう)
投稿が作成できない事態になっております。
今回、usersテーブルとreservationsテーブルの中間テーブルとして
reviewsテーブルを作成しているのですが
中間テーブルを扱うのが初めてでうまくつかいこなせておりません。

お力を貸してもらえるとありがたいです!
他にも必要な情報があれば追加いたします!

現在のlogがこの様な状態です。

log関連↓

bash

1web_1 | Started POST "/reservations/1/reviews" for 172.24.0.1 at 2021-12-19 02:01:31 +0000 2web_1 | Cannot render console from 172.24.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1 3web_1 | Processing by ReviewsController#create as JS 4web_1 | Parameters: {"authenticity_token"=>"[FILTERED]", "review"=>{"title"=>"テスト", "content"=>"テスト", "reservation_id"=>"#<Reservation:0x00007feef8744840>", "total_score"=>"3"}, "commit"=>"保存", "reservation_id"=>"1"} 5web_1 | User Load (1.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]] 6web_1 | TRANSACTION (1.5ms) BEGIN 7web_1 | ↳ app/controllers/reviews_controller.rb:16:in `create' 8web_1 | User Load (1.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] 9web_1 | ↳ app/controllers/reviews_controller.rb:16:in `create' 10web_1 | Reservation Load (1.2ms) SELECT "reservations".* FROM "reservations" WHERE "reservations"."id" = $1 LIMIT $2 [["id", 0], ["LIMIT", 1]] 11web_1 | ↳ app/controllers/reviews_controller.rb:16:in `create' 12web_1 | TRANSACTION (1.4ms) ROLLBACK 13web_1 | ↳ app/controllers/reviews_controller.rb:16:in `create' 14web_1 | No template found for ReviewsController#create, rendering head :no_content 15web_1 | Completed 204 No Content in 30ms (ActiveRecord: 6.7ms | Allocations: 7367)

ルーティング↓

routes.rb

ruby

1Rails.application.routes.draw do 2#必要そうな箇所のみ記載 3 4 resources :stores 5 resources :reservations do 6 resources :reviews #今回の該当部分 7 collection do 8 get :management_new 9 get :search 10 get :confirm_reservation 11 get :reservation_management 12 post :reservation_management_create 13 end 14 member do 15 get :edit_reserve 16 post :update_reserve 17 end 18 end 19end 20 21 devise_for :users, controllers: { 22 sessions: 'users/sessions', 23 passwords: 'users/passwords', 24 registrations: 'users/registrations', 25 omniauth_callbacks: "omniauth_callbacks" 26 }

コントローラ関連↓

reviews_conroller.rb

ruby

1class ReviewsController < ApplicationController 2 skip_before_action :authenticate_staff! 3 4 def new 5 @reservation = Reservation.find_by(status: :completed) 6 # @reservation = Reservation.where(status: "competed") 7 @review = Review.new 8 # @reviews = @reservation.reviews.include(:user).order(created_at: :desc) 9 end 10 11 def create 12 review = Review.new(review_params) 13 review.user_id = current_user.id 14 if review.save 15 redirect_to root_path #とりあえずsaveがうまくいかない 16 end 17 end 18 19 private 20 def review_params 21 params.require(:review).permit(:reservation_id, :title, :content, :total_score) 22 end

モデル関連↓

review.rb

ruby

1class Review < ApplicationRecord 2 belongs_to :user 3 belongs_to :reservation 4end

reservation.rb

ruby

1class Reservation < ApplicationRecord 2 belongs_to :guest, class_name: 'User' 3 has_many :reviews, dependent: :destroy 4 # reservation: trueを記述する事でreservation_validator.rbのバリデーションを有効にする 5 validates :start_time, presence: true, reservation: true 6 validates :end_time, reservation: true 7 validates :course, presence: true 8 validates :guest_id, presence: true 9 validates :comment, length: { maximum: 200 } 10 validate :in_working_time 11 validate :end_time_is_invalid_without_a_start_time 12end

user.rb

ruby

1class User < ApplicationRecord 2 belongs_to :store, optional: true 3 has_many :reservations 4 has_many :reviews, dependent: :destroy 5 # A user has only one cart. User > Cart > Orders (join table) > Items 6 # dependent: :destroyは未設定なので、Userが削除されてもCartは残る 7 has_one :cart, dependent: :destroy 8 include JpPrefecture 9 jp_prefecture :prefecture_code 10 # Include default devise modules. Others available are: 11 # :confirmable, :lockable, :timeoutable, :trackable 12 devise :database_authenticatable, :registerable, 13 :recoverable, :rememberable, :validatable, 14 :omniauthable, omniauth_providers: %i[line] 15end

View関連

ruby

1<p>レビューを書く</p> 2 3<div class="rating-box mt-3"> 4 <%#= form_with(model: @review, url: reservation_reviews_path(@reservation), method: :post) local: true do |f| %> 5 <%= form_with(model:[@reservation,@review]) do |f| %> 6 <div class="form-group"> 7 <%= f.label :title %> 8 <%= f.text_field :title, class: "form-control" %> 9 </div> 10 11 <div class="form-group"> 12 <%= f.label :content %> 13 <%= f.text_area :content, class: "form-control" %> 14 </div> 15 <div class="main-rating"> 16 <div class="ratings mb-3"> 17 <span class="fa fa-star-o" id="star"></span> 18 <span class="fa fa-star-o" id="star"></span> 19 <span class="fa fa-star-o" id="star"></span> 20 <span class="fa fa-star-o" id="star"></span> 21 <span class="fa fa-star-o" id="star"></span> 22 </div> 23 <div class="ml-3 rating-value-display"><span id="rating-value-display">0</span>/5</div> 24 </div> 25 26 <div class="form-group"> 27 <%= f.submit "保存", class: "btn btn-primary mt-3" %> 28 </div> 29 30 <div class="form-group"> 31 <%= link_to "他のレビューを見る", reservation_reviews_path(@reservation), class: "btn btn-secondary" %> 32 </div> 33 34 <%= f.hidden_field :reservation_id, value: @reservation %> 35 <%= f.hidden_field :total_score, id: "rating-value" %> 36 <% end %> 37</div> 38 39<%= javascript_pack_tag 'review/reviews' %> 40

対象の画面↓
イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問