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

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

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

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

Q&A

解決済

1回答

64閲覧

ActionView::SyntaxErrorInTemplate の原因が分かりません。

G23

総合スコア20

Ruby on Rails

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

0グッド

0クリップ

投稿2025/01/10 21:13

実現したいこと

ここに実現したいことを箇条書きで書いてください。
ActionView::SyntaxErrorInTemplateが出る原因が分かりません。

前提

ここに質問の内容を詳しく書いてください。
railsで宿泊管理アプリを作成しており、その中で写真をアップロードするフォームを作成しています。
その中で <%= form_with %>にurlをつけると表題のエラーが発生します。その原因が分かりません

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

Encountered a syntax error while rendering template SyntaxError: /Users/Shin/RAILS/ver.7/hotel3/app/views/rooms/photo_upload.html.erb:10: syntax error, unexpected local variable or method, expecting `end' ...nd= form_with model: @room url: photo_upload_room_path do |... ... ^~~

該当のソースコード

photo_upload.html.erb

1<div class="container mt-4"> 2 <div class="row"> 3 <div class="col-md-3"> 4 <%= render 'room_menu' %> 5 </div> 6 <div class="col-md-9"> 7 <div class="card"> 8 <div class="card-body"> 9 <h4 class="mt-4 mb-4"><b>写真アップロード</b></h4> 10 <%= form_with model: @room url: photo_upload_room_path do |f| %> 11 <% if @room.photo.attached? %> 12 <%= image_tag url_for(@room.photo) %> 13 <% end %> 14 15 <%= f.file_field :photo %> 16 <%= f.submit %> 17 <% end %> 18 19 <div> 20 <%= button_to '削除', delete_photo_room_url, method: :delete,data: { confirm: "本当に削除してよろしいですか?" },style: "z-index: 100;",class: "btn btn-outline-danger btn-sm" %> 21 </div> 22 23 </div> 24 </div> 25 </div> 26 </div> 27</div>

rooms_controller.rb

1 class RoomsController < ApplicationController 2 3 protect_from_forgery except: [:upload_photo] 4 5 before_action :set_room, except: [:index, :new, :create] 6 before_action :authenticate_user!, except: [:show] 7 before_action :is_authorised, only: [:listing, :pricing, :description, :photo_upload, :amenities, :location, :update] 8 9 10 def index 11 @rooms = current_user.rooms 12 end 13 14 def new 15 @room = current_user.rooms.build 16 end 17 18 def create 19 @room = current_user.rooms.build(room_params) 20 if @room.save 21 redirect_to listing_room_path(@room), notice: "保存しました。" 22 else 23 flash[:alert] = "問題が発生しました。" 24 render :new 25 end 26 end 27 def show 28 @photo = @room.photo 29 @i = 0 30 end 31 32 def listing 33 end 34 35 def pricing 36 end 37 38 def description 39 end 40 41 def amenities 42 end 43 44 def location 45 end 46 47 def update 48 new_params = room_params 49 new_params = room_params.merge(active: true) if is_ready_room 50 51 if @room.update(new_params) 52 flash[:notice] = "保存しました。" 53 else 54 flash[:alert] = "問題が発生しました。" 55 end 56 redirect_back(fallback_location: request.referer) 57 end 58 59 60 61 def photo_upload 62 @room.photo.attach(params[:file]) 63 if @room.photo.update(params[:file]) 64 flash[:notice] = '写真を更新しました' 65 redirect_to @user 66 else 67 flash[:notice] = '写真の更新に失敗しました' 68 render 'photo_upload' 69 end 70 end 71 72 def delete_photo 73 @room = Room.find(params[:id]) 74 @room.photo.purge 75 redirect_to photo_upload_room_path(@room) 76 end 77 def preload 78 today = Date.today 79 reservations = @room.reservations.where("start_date >= ? OR end_date >= ?", today, today) 80 render json: reservations 81 end 82 # 予約 終了日のAJAX処理 83 def preview 84 start_date = Date.parse(params[:start_date]) 85 end_date = Date.parse(params[:end_date]) 86 output = { 87 conflict: is_conflict(start_date, end_date, @room) 88 } 89 render json: output 90 end 91 92 93 94 private 95 def set_room 96 @room = Room.find(params[:id]) 97 end 98 def room_params 99 params.require(:room).permit(:home_type, :room_type, :accommodate, :bed_room, :bath_room, :listing_name, :summary, :address, :is_tv, :is_kitchen, :is_air, :is_heating, :is_internet, :price, :active, :description, :photo) 100 end 101 102 def is_authorised 103 redirect_to root_path, alert: "権限がありません。" unless current_user.id == @room.user_id 104 end 105 106 def is_ready_room 107 !@room.active && !@room.price.blank? && !@room.listing_name.blank? && !@room.address.blank? &&!@room.photo.empty? 108 end 109 def is_conflict(start_date, end_date, room) 110 check = room.reservations.where("? < start_date AND end_date < ?", start_date, end_date) 111 check.size > 0? true : false 112 end 113 114end 115

room.rb

1class Room < ApplicationRecord 2 belongs_to :user 3 has_many :reservations 4 5 has_one_attached :photo 6 7 validates :home_type, presence: true 8 validates :room_type, presence: true 9 validates :accommodate, presence: true 10 validates :bed_room, presence: true 11 validates :bath_room, presence: true 12 13 def self.ransackable_attributes(auth_object = nil) 14 %w[listing_name] 15 end 16end 17

試したこと

urlの記載に間違いがないか、routeingに間違いがないかなどは確認しました。
また、urlの部分を削除すると問題なく起動されるのも確認できています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

urlの記載に間違いがないか

その直前に間違いがあります。

diff

1- <%= form_with model: @room url: photo_upload_room_path do |f| %> 2+ <%= form_with model: @room, url: photo_upload_room_path do |f| %>

投稿2025/01/10 23:59

maisumakun

総合スコア146175

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

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

G23

2025/01/11 14:38

解決しました、ありがとうございます。 単純な間違いをまず疑うことを再認識できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問